From a6c608c03b9d0452e0e6f0fffb8a712a70864fb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janis=20Daniel=20Da=CC=88hne?=
 <janis.daehne2@student.uni-halle.de>
Date: Mon, 29 Jul 2019 19:17:16 +0200
Subject: [PATCH] - removed max lines to read/write in favor of max characters
 limit - started new migration history (which removed some wrong shadow props)

---
 src/ClientServer/ClientServer.csproj          |    3 +
 src/ClientServer/Config/Constants.cs          |    6 +-
 .../EditCustomProjectController.cs            |   10 +-
 .../DoExerciseAfterSolutionController.cs      |    6 +
 .../Core/Exercises/DoExerciseController.cs    |   17 +
 .../Core/SystemSettingsController.cs          |    6 -
 .../Core/Testing/TestingController.cs         |   68 +-
 .../Controllers/Core/Users/GroupController.cs |    2 -
 .../Controllers/Core/Users/UsersController.cs |   11 +
 .../dashboard/DashboardController.cs          |    3 -
 src/ClientServer/Db/YapexDbContext.cs         |   18 +-
 .../20160824181544_init.Designer.cs           | 1324 ----------
 .../20160827045350_init2.Designer.cs          | 1326 ----------
 .../Migrations/20160827045350_init2.cs        |   25 -
 ...160831154002_userSettingsTheme.Designer.cs | 1328 ----------
 .../20160831154002_userSettingsTheme.cs       |   24 -
 .../20160903141707_init4.Designer.cs          | 1335 ----------
 .../Migrations/20160903141707_init4.cs        |   98 -
 .../20160906195429_init5.Designer.cs          | 1331 ----------
 .../Migrations/20160906195429_init5.cs        |   34 -
 .../20160921124646_final1.Designer.cs         | 1358 ----------
 .../Migrations/20160921124646_final1.cs       |  165 --
 .../20160921130105_final2.Designer.cs         | 1358 ----------
 .../Migrations/20160921130105_final2.cs       |   20 -
 .../20160921155214_final3.Designer.cs         | 1358 ----------
 .../Migrations/20160921155214_final3.cs       |   25 -
 .../20160923095756_final4.Designer.cs         | 1362 ----------
 .../Migrations/20160923095756_final4.cs       |   34 -
 .../20161001124636_tagPermission.Designer.cs  | 1364 ----------
 .../20161001124636_tagPermission.cs           |   25 -
 ...20161001140957_tagDisplayName2.Designer.cs | 1363 ----------
 .../20161001140957_tagDisplayName2.cs         |   43 -
 ...0161001142650_deleteTagCascade.Designer.cs | 1364 ----------
 .../20161001142650_deleteTagCascade.cs        |   39 -
 ...161220124855_ExerciseAddedNote.Designer.cs | 1366 ----------
 .../20161220124855_ExerciseAddedNote.cs       |   24 -
 .../20170112222129_authTokens.Designer.cs     | 1396 ----------
 .../Migrations/20170112222129_authTokens.cs   |   46 -
 .../20170307190625_lang.Designer.cs           | 1398 ----------
 .../Migrations/20170307190625_lang.cs         |   24 -
 ...71009190359_tagBackgroundColor.Designer.cs | 1400 ----------
 .../20171009190359_tagBackgroundColor.cs      |   24 -
 .../20171009191709_tagDescription.Designer.cs | 1402 ----------
 .../20171009191709_tagDescription.cs          |   24 -
 .../20171012120923_tutorFreedback.Designer.cs | 1404 -----------
 .../20171012120923_tutorFreedback.cs          |   36 -
 ...nabledNullableAssessmentPoints.Designer.cs | 1404 -----------
 ...5132006_enabledNullableAssessmentPoints.cs |   35 -
 ...20171025160923_uniqueAuthToken.Designer.cs | 1407 -----------
 .../20171025160923_uniqueAuthToken.cs         |   25 -
 ...50_participationShouldNotCount.Designer.cs | 1410 -----------
 ...71106184650_participationShouldNotCount.cs |   25 -
 .../20171109144627_customProjects.Designer.cs | 1685 -------------
 .../20171109144627_customProjects.cs          |  347 ---
 ...3042_customProjectTestsWeights.Designer.cs | 1687 -------------
 ...0171110153042_customProjectTestsWeights.cs |   25 -
 ..._dashboardSystemRolePermission.Designer.cs | 1689 -------------
 ...229135558_dashboardSystemRolePermission.cs |   25 -
 ...0214130057_ReleaseEExamOptions.Designer.cs | 1693 -------------
 .../20180214130057_ReleaseEExamOptions.cs     |   35 -
 ...12957_ReleaseHideSiteHeaderBar.Designer.cs | 1695 -------------
 ...20180215112957_ReleaseHideSiteHeaderBar.cs |   25 -
 ...2160339_removeSolutionVersion1.Designer.cs | 1789 -------------
 .../20180912160339_removeSolutionVersion1.cs  |  151 --
 ...2171554_removeSolutionVersion2.Designer.cs | 1804 -------------
 .../20180912171554_removeSolutionVersion2.cs  |   58 -
 ...2182512_removeSolutionVersion3.Designer.cs | 1812 -------------
 .../20180912182512_removeSolutionVersion3.cs  |   55 -
 ...3125543_removeSolutionVersion4.Designer.cs | 1656 ------------
 .../20180913125543_removeSolutionVersion4.cs  |  230 --
 ...roupRolePermissionAndUpdatedAt.Designer.cs | 1660 ------------
 ...1120340_groupRolePermissionAndUpdatedAt.cs |   46 -
 ...80929145343_addedAfterSolution.Designer.cs | 1827 --------------
 .../20180929145343_addedAfterSolution.cs      |  199 --
 .../20181001151109_maxCustomTests.Designer.cs | 1829 --------------
 .../20181001151109_maxCustomTests.cs          |   25 -
 .../20181004180755_csrfToken.Designer.cs      | 1831 --------------
 .../Migrations/20181004180755_csrfToken.cs    |   24 -
 ...04_UserSettingsAllowRemoveLang.Designer.cs | 1831 --------------
 ...81008183904_UserSettingsAllowRemoveLang.cs |   25 -
 ...edSystemPermissionCanEditGroup.Designer.cs | 1829 --------------
 ...314_removedSystemPermissionCanEditGroup.cs |   25 -
 ...1012124603_SetStringMaxLengths.Designer.cs | 1882 --------------
 .../20181012124603_SetStringMaxLengths.cs     |  792 ------
 .../20181026193143_ServerMessage.Designer.cs  | 1885 --------------
 .../20181026193143_ServerMessage.cs           |   25 -
 ...ParticipationLockSolutionsFlag.Designer.cs | 1887 --------------
 ...27121021_ParticipationLockSolutionsFlag.cs |   25 -
 ...articipationLockSolutionsFlag2.Designer.cs | 1887 --------------
 ...7122426_ParticipationLockSolutionsFlag2.cs |   27 -
 ...23151602_StoreAssessmentErrors.Designer.cs | 1890 --------------
 .../20181123151602_StoreAssessmentErrors.cs   |   25 -
 ...20190202125311_MoreExamOptions.Designer.cs | 1896 --------------
 .../20190202125311_MoreExamOptions.cs         |   45 -
 ...190213174200_NewSystemSettings.Designer.cs | 1913 --------------
 .../20190213174200_NewSystemSettings.cs       |   85 -
 ...190214140941_PLangHighlighting.Designer.cs | 1919 --------------
 .../20190214140941_PLangHighlighting.cs       |   35 -
 ...0214151239_PLangFileExtensions.Designer.cs | 1922 --------------
 .../20190214151239_PLangFileExtensions.cs     |   25 -
 ...RemovedUnusedPlangMarkdownMode.Designer.cs | 1919 --------------
 ...14202737_RemovedUnusedPlangMarkdownMode.cs |   25 -
 ...20190320182329_TestAssetHashes.Designer.cs | 1928 --------------
 .../20190320182329_TestAssetHashes.cs         |   45 -
 ...29152856_LastEditingIpSolution.Designer.cs | 1931 --------------
 .../20190329152856_LastEditingIpSolution.cs   |   25 -
 ..._SystemSettingsTestServerUiUrl.Designer.cs | 1934 --------------
 ...409160808_SystemSettingsTestServerUiUrl.cs |   25 -
 ...0446_SomeDeleteActionsChanged1.Designer.cs | 1926 --------------
 ...0190410160446_SomeDeleteActionsChanged1.cs |  207 --
 .../20190419112922_JustRunTimeout.Designer.cs | 1928 --------------
 .../20190419112922_JustRunTimeout.cs          |   25 -
 ...9153412_OtherJustRunTestLimits.Designer.cs | 1932 --------------
 .../20190419153412_OtherJustRunTestLimits.cs  |   35 -
 ...100505_CustomProjectTestLimits.Designer.cs | 1938 --------------
 .../20190420100505_CustomProjectTestLimits.cs |   45 -
 ...0190420164845_TestRunningTimes.Designer.cs | 1988 ---------------
 .../20190420164845_TestRunningTimes.cs        |  205 --
 ...reTestLimitsAndCompilerTimeout.Designer.cs | 2016 ---------------
 ...20190430202149_MaxManualPoints.Designer.cs | 2018 ---------------
 .../20190430202149_MaxManualPoints.cs         |   24 -
 ...0501142551_HiddenTemplateFiles.Designer.cs | 2020 ---------------
 .../20190501142551_HiddenTemplateFiles.cs     |   25 -
 ...43221_RenameTemplateVisibility.Designer.cs | 2020 ---------------
 ...20190501143221_RenameTemplateVisibility.cs |   35 -
 ...160702_ReleasePLangRequiredNow.Designer.cs | 2020 ---------------
 .../20190503160702_ReleasePLangRequiredNow.cs |   25 -
 ...0190505105057_ExerciseExamLock.Designer.cs | 2022 ---------------
 .../20190505105057_ExerciseExamLock.cs        |   25 -
 ...rciseLockedGroupRolePermission.Designer.cs | 2022 ---------------
 ...22337_ExerciseLockedGroupRolePermission.cs |   35 -
 ...508134143_RemoveCopyPermission.Designer.cs | 2020 ---------------
 .../20190508134143_RemoveCopyPermission.cs    |   25 -
 ...30135332_ExerciseMarkdownFiles.Designer.cs | 2076 ---------------
 .../20190530135332_ExerciseMarkdownFiles.cs   |   74 -
 .../20190601145551_ExerciseTestAssetFiles.cs  |   74 -
 ...20190602180648_CustomUserFiles.Designer.cs | 2244 -----------------
 .../20190602180648_CustomUserFiles.cs         |  148 --
 ...AssetPathsAddedCompilerOptions.Designer.cs | 2241 ----------------
 ...56_RemoveAssetPathsAddedCompilerOptions.cs |   65 -
 .../20190612151016_Renames.Designer.cs        | 2241 ----------------
 .../Migrations/20190612151016_Renames.cs      |   27 -
 .../20190728133647_RemoveOldDbAssets.cs       |  157 --
 ...ner.cs => 20190729124536_init.Designer.cs} |  190 +-
 ...4181544_init.cs => 20190729124536_init.cs} | 1270 +++++++---
 ...9_addTestResultCharacterLimit.Designer.cs} |  456 ++--
 ...0729133239_addTestResultCharacterLimit.cs} |  131 +-
 ...shot.cs => YapexDbContextModelSnapshot.cs} |  218 +-
 ...stomProjectTestWithSolutionAsTestResult.cs |   11 +
 ...CustomTestWithAfterSolutionAsTestResult.cs |   11 +
 .../TestWithAfterSolutionAsTestResult.cs      |   11 +
 ...ustomTestWithSingleSolutionAsTestResult.cs |   11 +
 .../TestWithSingleSolutionAsTestResult.cs     |   11 +
 153 files changed, 1657 insertions(+), 119903 deletions(-)
 delete mode 100644 src/ClientServer/Migrations/20160824181544_init.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160827045350_init2.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160827045350_init2.cs
 delete mode 100644 src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160831154002_userSettingsTheme.cs
 delete mode 100644 src/ClientServer/Migrations/20160903141707_init4.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160903141707_init4.cs
 delete mode 100644 src/ClientServer/Migrations/20160906195429_init5.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160906195429_init5.cs
 delete mode 100644 src/ClientServer/Migrations/20160921124646_final1.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160921124646_final1.cs
 delete mode 100644 src/ClientServer/Migrations/20160921130105_final2.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160921130105_final2.cs
 delete mode 100644 src/ClientServer/Migrations/20160921155214_final3.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160921155214_final3.cs
 delete mode 100644 src/ClientServer/Migrations/20160923095756_final4.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20160923095756_final4.cs
 delete mode 100644 src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20161001124636_tagPermission.cs
 delete mode 100644 src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20161001140957_tagDisplayName2.cs
 delete mode 100644 src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20161001142650_deleteTagCascade.cs
 delete mode 100644 src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.cs
 delete mode 100644 src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20170112222129_authTokens.cs
 delete mode 100644 src/ClientServer/Migrations/20170307190625_lang.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20170307190625_lang.cs
 delete mode 100755 src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171009190359_tagBackgroundColor.cs
 delete mode 100755 src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171009191709_tagDescription.cs
 delete mode 100644 src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20171012120923_tutorFreedback.cs
 delete mode 100644 src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
 delete mode 100644 src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.cs
 delete mode 100755 src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171025160923_uniqueAuthToken.cs
 delete mode 100755 src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171106184650_participationShouldNotCount.cs
 delete mode 100755 src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171109144627_customProjects.cs
 delete mode 100755 src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.cs
 delete mode 100755 src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.cs
 delete mode 100755 src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.cs
 delete mode 100755 src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.cs
 delete mode 100755 src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.cs
 delete mode 100755 src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.cs
 delete mode 100755 src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.cs
 delete mode 100755 src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.cs
 delete mode 100755 src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.cs
 delete mode 100755 src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20180929145343_addedAfterSolution.cs
 delete mode 100755 src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181001151109_maxCustomTests.cs
 delete mode 100755 src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181004180755_csrfToken.cs
 delete mode 100755 src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.cs
 delete mode 100755 src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.cs
 delete mode 100755 src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.cs
 delete mode 100755 src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181026193143_ServerMessage.cs
 delete mode 100755 src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.cs
 delete mode 100755 src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.cs
 delete mode 100755 src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.cs
 delete mode 100755 src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190202125311_MoreExamOptions.cs
 delete mode 100755 src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190213174200_NewSystemSettings.cs
 delete mode 100755 src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190214140941_PLangHighlighting.cs
 delete mode 100755 src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190214151239_PLangFileExtensions.cs
 delete mode 100755 src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.cs
 delete mode 100755 src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190320182329_TestAssetHashes.cs
 delete mode 100755 src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.cs
 delete mode 100755 src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.cs
 delete mode 100755 src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.cs
 delete mode 100755 src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190419112922_JustRunTimeout.cs
 delete mode 100755 src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.cs
 delete mode 100755 src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.cs
 delete mode 100755 src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190420164845_TestRunningTimes.cs
 delete mode 100755 src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190430202149_MaxManualPoints.cs
 delete mode 100755 src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.cs
 delete mode 100755 src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.cs
 delete mode 100755 src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.cs
 delete mode 100755 src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190505105057_ExerciseExamLock.cs
 delete mode 100755 src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.cs
 delete mode 100755 src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.cs
 delete mode 100755 src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.cs
 delete mode 100755 src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.cs
 delete mode 100755 src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190602180648_CustomUserFiles.cs
 delete mode 100755 src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs
 delete mode 100755 src/ClientServer/Migrations/20190612151016_Renames.Designer.cs
 delete mode 100755 src/ClientServer/Migrations/20190612151016_Renames.cs
 delete mode 100755 src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.cs
 rename src/ClientServer/Migrations/{20190728133647_RemoveOldDbAssets.Designer.cs => 20190729124536_init.Designer.cs} (94%)
 rename src/ClientServer/Migrations/{20160824181544_init.cs => 20190729124536_init.cs} (53%)
 mode change 100644 => 100755
 rename src/ClientServer/Migrations/{20190601145551_ExerciseTestAssetFiles.Designer.cs => 20190729133239_addTestResultCharacterLimit.Designer.cs} (89%)
 rename src/ClientServer/Migrations/{20190428191918_MoreTestLimitsAndCompilerTimeout.cs => 20190729133239_addTestResultCharacterLimit.cs} (52%)
 rename src/ClientServer/Migrations/{SyndromDbContextModelSnapshot.cs => YapexDbContextModelSnapshot.cs} (93%)
 mode change 100644 => 100755

diff --git a/src/ClientServer/ClientServer.csproj b/src/ClientServer/ClientServer.csproj
index 0ef607e..97a6913 100755
--- a/src/ClientServer/ClientServer.csproj
+++ b/src/ClientServer/ClientServer.csproj
@@ -55,4 +55,7 @@
   <ItemGroup>
     <None Remove="wwwroot\**" />
   </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Migrations" />
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/ClientServer/Config/Constants.cs b/src/ClientServer/Config/Constants.cs
index 7a314f3..e39f097 100644
--- a/src/ClientServer/Config/Constants.cs
+++ b/src/ClientServer/Config/Constants.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Helpers
     /// </summary>
     public static class Constants
     {
-        public static string VersionString = "2.4.1";
+        public static string VersionString = "2.4.2";
 
         /// <summary>
         /// this is only set once at program.cs!!
@@ -60,6 +60,10 @@ namespace ClientServer.Helpers
         
         /// <summary>
         /// the string to split lines in the test protocol
+        /// do not change this after we have data in the db!
+        /// because all test results are stored as string that we split with this...
+        /// a bad design decision... why haven'T we used just \r\n ??
+        /// now every new line counts as 4 characters...
         /// </summary>
         public const string TestProtocolSplitString = "\\r\\n";
 
diff --git a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
index fb5a461..182002a 100644
--- a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
+++ b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
@@ -206,7 +206,15 @@ namespace ClientServer.Controllers.Core.customProjects
                     Protocol =
                         p.Protocol.Split(new string[] {Constants.TestProtocolSplitString},
                             StringSplitOptions.RemoveEmptyEntries).ToList(),
-                    HasCompiled = p.HasCompiled
+                    HasCompiled = p.HasCompiled,
+                    CharacterLimitExceeded = p.CharacterLimitExceeded,
+                    CharacterLimitUsed = p.CharacterLimitUsed,
+                    TimeoutInMsUsed = p.TimeoutInMsUsed,
+                    CompileTimeoutInMsUsed = p.CompileTimeoutInMsUsed,
+                    RunnerVersion = p.RunnerVersion,
+                    TimeForCompiling = p.TimeForCompiling,
+                    TimeForUserProgram = p.TimeForUserProgram,
+                    TestServerVersion = p.TestServerVersion
                 }).ToList()
                 ;
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
index c36d5a0..608902f 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
@@ -695,6 +695,8 @@ namespace ClientServer.Controllers.Core.Exercises.DoExerciseAfterSolution
                     TimeForUserProgram = p.TimeForUserProgram,
                     TimeoutInMsUsed = p.TimeoutInMsUsed,
                     CompileTimeoutInMsUsed = p.CompileTimeoutInMsUsed,
+                    CharacterLimitExceeded = p.CharacterLimitExceeded,
+                    CharacterLimitUsed = p.CharacterLimitUsed,
                 }).ToList(),
                 CustomTestResults = new List<StoredTestResultFromBackend>()
             };
@@ -736,6 +738,8 @@ namespace ClientServer.Controllers.Core.Exercises.DoExerciseAfterSolution
                         TimeForUserProgram = p.TimeForUserProgram,
                         TimeoutInMsUsed = p.TimeoutInMsUsed,
                         CompileTimeoutInMsUsed = p.CompileTimeoutInMsUsed,
+                        CharacterLimitExceeded = p.CharacterLimitExceeded,
+                        CharacterLimitUsed = p.CharacterLimitUsed,
                     }).ToList()
                     ;
             }
@@ -929,6 +933,8 @@ namespace ClientServer.Controllers.Core.Exercises.DoExerciseAfterSolution
                             TimeForUserProgram = p.Result.TimeForUserProgram,
                             TimeoutInMsUsed = p.Result.TimeoutInMsUsed,
                             CompileTimeoutInMsUsed = p.Result.CompileTimeoutInMsUsed,
+                            CharacterLimitExceeded = p.Result.CharacterLimitExceeded,
+                            CharacterLimitUsed = p.Result.CharacterLimitUsed,
                         }
                 }).ToList();
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
index 3617f45..907d0e3 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
@@ -1032,6 +1032,8 @@ namespace ClientServer.Controllers.Core.Exercises
                     TimeForUserProgram = p.TimeForUserProgram,
                     TimeoutInMsUsed = p.TimeoutInMsUsed,
                     CompileTimeoutInMsUsed = p.CompileTimeoutInMsUsed,
+                    CharacterLimitExceeded = p.CharacterLimitExceeded,
+                    CharacterLimitUsed = p.CharacterLimitUsed,
                 }).ToList(),
                 CustomTestResults = new List<StoredTestResultFromBackend>()
             };
@@ -1074,6 +1076,8 @@ namespace ClientServer.Controllers.Core.Exercises
                         TimeForUserProgram = p.TimeForUserProgram,
                         TimeoutInMsUsed = p.TimeoutInMsUsed,
                         CompileTimeoutInMsUsed = p.CompileTimeoutInMsUsed,
+                        CharacterLimitExceeded = p.CharacterLimitExceeded,
+                        CharacterLimitUsed = p.CharacterLimitUsed,
                     }).ToList()
                     ;
             }
@@ -1324,6 +1328,8 @@ namespace ClientServer.Controllers.Core.Exercises
                             TimeForUserProgram = p.Result.TimeForUserProgram,
                             TimeoutInMsUsed = p.Result.TimeoutInMsUsed,
                             CompileTimeoutInMsUsed = p.Result.CompileTimeoutInMsUsed,
+                            CharacterLimitExceeded = p.Result.CharacterLimitExceeded,
+                            CharacterLimitUsed = p.Result.CharacterLimitUsed,
                         }
                 }).ToList();
 
@@ -3826,6 +3832,17 @@ namespace ClientServer.Controllers.Core.Exercises
         /// can be null
         /// </summary>
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 
     #endregion
diff --git a/src/ClientServer/Controllers/Core/SystemSettingsController.cs b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
index 4eb45f9..e8d199d 100644
--- a/src/ClientServer/Controllers/Core/SystemSettingsController.cs
+++ b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
@@ -25,10 +25,7 @@ namespace ClientServer.Controllers.Core
         /// </summary>
         private static TestServerPublicSettings InvalidTestServerPublicSettings = new TestServerPublicSettings()
         {
-            MaxLinesToRead = -1,
-            MaxLinesToWrite = -1,
             HardTimeoutInMs = -1,
-            MaxErrLinesToRead = -1,
             MaxNumberOfTestsWithOneRequest = -1,
             HardMemoryLimitInKb = -1,
             HardDiskSpaceLimitInKb = -1,
@@ -530,8 +527,5 @@ namespace ClientServer.Controllers.Core
         public int HardDiskSpaceLimitInKb { get; set; }
 
         public int MaxNumberOfTestsWithOneRequest { get; set; }
-        public int MaxLinesToRead { get; set; }
-        public int MaxErrLinesToRead { get; set; }
-        public int MaxLinesToWrite { get; set; }
     }
 }
diff --git a/src/ClientServer/Controllers/Core/Testing/TestingController.cs b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
index a71f5c5..bcd0941 100644
--- a/src/ClientServer/Controllers/Core/Testing/TestingController.cs
+++ b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
@@ -607,11 +607,20 @@ namespace ClientServer.Controllers.Core.Testing
 
             AnswerTestFromTestServer testResult = testResults[0];
 
+            //in case the test-runner does not restrict this...
+            bool characterLimitExceeded = testResult.Protocol.Length > YapexDbContext.TestProtocolMaxStringLength;
+
+            if (characterLimitExceeded)
+            {
+                //cut last part
+                testResult.Protocol = testResult.Protocol.Substring(0, YapexDbContext.TestProtocolMaxStringLength);
+                testResult.CharacterLimitExceeded = true;
+            }
+                                           
             string[] protocol =
                 testResult.Protocol.Split(new string[] {Constants.TestProtocolSplitString},
                     StringSplitOptions.RemoveEmptyEntries);
 
-
             //and give user feedback
             var response = new TestAnswerFromBackend
             {
@@ -629,6 +638,8 @@ namespace ClientServer.Controllers.Core.Testing
                 TimeForUserProgram = testResult.TimeForUserProgram,
                 TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                 CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                CharacterLimitUsed = YapexDbContext.TestProtocolMaxStringLength
             };
 
 
@@ -1504,6 +1515,8 @@ namespace ClientServer.Controllers.Core.Testing
                         TimeForUserProgram = testResult.TimeForUserProgram,
                         TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                         CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                        CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                        CharacterLimitUsed = testResult.CharacterLimitUsed,
                     };
 
                     _context.TestWithSingleSolutionAsTestResult.Add(oldResult);
@@ -1523,6 +1536,8 @@ namespace ClientServer.Controllers.Core.Testing
                     oldResult.TimeForUserProgram = testResult.TimeForUserProgram;
                     oldResult.TimeoutInMsUsed = testResult.TimeoutInMsUsed;
                     oldResult.CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed;
+                   oldResult.CharacterLimitExceeded = testResult.CharacterLimitExceeded;
+                   oldResult.CharacterLimitUsed = testResult.CharacterLimitUsed;
                 }
 
                 try
@@ -1839,6 +1854,8 @@ namespace ClientServer.Controllers.Core.Testing
                             TimeForUserProgram = testResult.TimeForUserProgram,
                             TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                             CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                            CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                            CharacterLimitUsed = testResult.CharacterLimitUsed,
                         };
 
                         _context.TestWithAfterSolutionAsTestResults.Add(oldResult);
@@ -1858,6 +1875,8 @@ namespace ClientServer.Controllers.Core.Testing
                         oldResult.TimeForUserProgram = testResult.TimeForUserProgram;
                         oldResult.TimeoutInMsUsed = testResult.TimeoutInMsUsed;
                         oldResult.CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed;
+                       oldResult.CharacterLimitExceeded = testResult.CharacterLimitExceeded;
+                       oldResult.CharacterLimitUsed = testResult.CharacterLimitUsed;
                     }
 
                     try
@@ -2013,6 +2032,8 @@ namespace ClientServer.Controllers.Core.Testing
                             TimeForUserProgram = testResult.TimeForUserProgram,
                             TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                             CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                            CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                            CharacterLimitUsed = testResult.CharacterLimitUsed,
                         };
 
                         _context.CustomTestWithAfterSolutionAsTestResults.Add(oldResult);
@@ -2032,6 +2053,8 @@ namespace ClientServer.Controllers.Core.Testing
                         oldResult.TimeForUserProgram = testResult.TimeForUserProgram;
                         oldResult.TimeoutInMsUsed = testResult.TimeoutInMsUsed;
                         oldResult.CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed;
+                        oldResult.CharacterLimitExceeded = testResult.CharacterLimitExceeded;
+                        oldResult.CharacterLimitUsed = testResult.CharacterLimitUsed;
                     }
 
                     try
@@ -2233,6 +2256,8 @@ namespace ClientServer.Controllers.Core.Testing
                         TimeForUserProgram = testResult.TimeForUserProgram,
                         TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                         CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                        CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                        CharacterLimitUsed = testResult.CharacterLimitUsed,
                     };
 
                     _context.CustomTestWithSingleSolutionAsTestResult.Add(oldResult);
@@ -2252,6 +2277,8 @@ namespace ClientServer.Controllers.Core.Testing
                     oldResult.TimeForUserProgram = testResult.TimeForUserProgram;
                     oldResult.TimeoutInMsUsed = testResult.TimeoutInMsUsed;
                     oldResult.CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed;
+                    oldResult.CharacterLimitExceeded = testResult.CharacterLimitExceeded;
+                    oldResult.CharacterLimitUsed = testResult.CharacterLimitUsed;
                 }
 
                 try
@@ -2454,6 +2481,8 @@ namespace ClientServer.Controllers.Core.Testing
                         TimeForUserProgram = testResult.TimeForUserProgram,
                         TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                         CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                        CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                        CharacterLimitUsed = testResult.CharacterLimitUsed
                     };
 
                     _context.CustomProjectTestWithSolutionAsTestResults.Add(oldResult);
@@ -2473,6 +2502,8 @@ namespace ClientServer.Controllers.Core.Testing
                     oldResult.TimeForUserProgram = testResult.TimeForUserProgram;
                     oldResult.TimeoutInMsUsed = testResult.TimeoutInMsUsed;
                     oldResult.CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed;
+                    oldResult.CharacterLimitExceeded = testResult.CharacterLimitExceeded;
+                    oldResult.CharacterLimitUsed = testResult.CharacterLimitUsed;
                 }
 
                 try
@@ -2975,6 +3006,16 @@ namespace ClientServer.Controllers.Core.Testing
                     return null;
                 }
 
+                //in case the test-runner does not restrict this...
+                bool characterLimitExceeded = testResult.Protocol.Length > YapexDbContext.TestProtocolMaxStringLength;
+
+                if (characterLimitExceeded)
+                {
+                    //cut last part
+                    testResult.Protocol = testResult.Protocol.Substring(0, YapexDbContext.TestProtocolMaxStringLength);
+                    testResult.CharacterLimitExceeded = true;
+                }
+                
                 string[] protocol =
                     testResult.Protocol.Split(new string[] {Constants.TestProtocolSplitString},
                         StringSplitOptions.RemoveEmptyEntries);
@@ -2996,6 +3037,8 @@ namespace ClientServer.Controllers.Core.Testing
                     TimeForUserProgram = testResult.TimeForUserProgram,
                     TimeoutInMsUsed = testResult.TimeoutInMsUsed,
                     CompileTimeoutInMsUsed = testResult.CompileTimeoutInMsUsed,
+                    CharacterLimitExceeded = testResult.CharacterLimitExceeded,
+                    CharacterLimitUsed = YapexDbContext.TestProtocolMaxStringLength
                 });
             }
 
@@ -3081,7 +3124,8 @@ namespace ClientServer.Controllers.Core.Testing
                         Hash = p.Hash
                     }).ToList(),
                 }).ToList(),
-                RequestDistinctionString = userId + "_" + nextSequentialNumber
+                RequestDistinctionString = userId + "_" + nextSequentialNumber,
+                CharacterLimitProtocol = YapexDbContext.TestProtocolMaxStringLength
             };
 
 
@@ -3440,6 +3484,13 @@ namespace ClientServer.Controllers.Core.Testing
         /// the tests to run
         /// </summary>
         public List<RunTestCommandDataForTestServer> Tests { get; set; }
+        
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// for the test result protocol
+        /// can be null for old results
+        /// </summary>
+        public int CharacterLimitProtocol { get; set; }
     }
 
     /// <summary>
@@ -3626,6 +3677,17 @@ namespace ClientServer.Controllers.Core.Testing
         /// can be null
         /// </summary>
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 
     public class AnswerTestFromTestServer : AnswerTestFromTestServerBase
@@ -3637,7 +3699,7 @@ namespace ClientServer.Controllers.Core.Testing
     }
 
     /// <summary>
-    /// the result from the test
+    /// the result from the test (what we send back to the frontend)
     /// </summary>
     public class TestAnswerFromBackend : AnswerTestFromTestServerBase
     {
diff --git a/src/ClientServer/Controllers/Core/Users/GroupController.cs b/src/ClientServer/Controllers/Core/Users/GroupController.cs
index f58fab2..fb7537c 100644
--- a/src/ClientServer/Controllers/Core/Users/GroupController.cs
+++ b/src/ClientServer/Controllers/Core/Users/GroupController.cs
@@ -2,11 +2,9 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq.Expressions;
-using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using ClientServer.Db;
 using ClientServer.Helpers;
-using ClientServer.Migrations;
 using ClientServer.Models.Users;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
diff --git a/src/ClientServer/Controllers/Core/Users/UsersController.cs b/src/ClientServer/Controllers/Core/Users/UsersController.cs
index 04ab0e5..2b19120 100644
--- a/src/ClientServer/Controllers/Core/Users/UsersController.cs
+++ b/src/ClientServer/Controllers/Core/Users/UsersController.cs
@@ -776,6 +776,17 @@ namespace ClientServer.Controllers.Core.Users
 
             //TODO MUST check if all custom tests and exercise solutions and group memberships gets deleted!!
 
+            var participationWhereExIsPermanentlyLockedCount = await _context.ExerciseReleaseWithUserAsParticipations
+                .CountAsync(p => p.UserId == userId && p.ExerciseRelease.Exercise.IsPermanentlyLocked)
+                ;
+
+            if (participationWhereExIsPermanentlyLockedCount > 0)
+            {
+                await
+                    Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest, "cannot delete user because he has participation(s) (solutions) für locked exercise(s)")));
+                return;
+            }
+
             
             //delete all exercises where the user is thw owner but the exercise is hidden... (because no one has access to this exercises)
 
diff --git a/src/ClientServer/Controllers/dashboard/DashboardController.cs b/src/ClientServer/Controllers/dashboard/DashboardController.cs
index 3827ce7..94693f8 100644
--- a/src/ClientServer/Controllers/dashboard/DashboardController.cs
+++ b/src/ClientServer/Controllers/dashboard/DashboardController.cs
@@ -527,9 +527,6 @@ namespace ClientServer.Controllers
          */
         public int MaxParallelTests { get; set; }
         public int MaxNumberOfTestsWithOneRequest { get; set; }
-        public int MaxLinesToRead { get; set; }
-        public int MaxErrLinesToRead { get; set; }
-        public int MaxLinesToWrite { get; set; }
 
         public string DbServer { get; set; }
         public string DbName { get; set; }
diff --git a/src/ClientServer/Db/YapexDbContext.cs b/src/ClientServer/Db/YapexDbContext.cs
index 070af71..01889b4 100644
--- a/src/ClientServer/Db/YapexDbContext.cs
+++ b/src/ClientServer/Db/YapexDbContext.cs
@@ -30,21 +30,23 @@ namespace ClientServer.Db
         ///
         /// this is not in constants because should not be changed...
         /// </summary>
-        public const int DefaultMaxStringLength = 500;
+        public const int DefaultMaxStringLength = 2000;
 
-        public const int DescriptionContentMaxStringLength = 10000;
+        public const int DescriptionContentMaxStringLength = 50000;
 
-        public const int FileContentMaxStringLength = 10000;
+        public const int FileContentMaxStringLength = 70000;
 
-        public const int TestContentMaxStringLength = 5000;
+        public const int TestContentMaxStringLength = 80000;
         
-        public const int TestProtocolMaxStringLength = TestContentMaxStringLength*2;
+        /// <summary>
+        /// add 100 bytes for some header stuff e.g. exit code, timeouts, ...
+        /// </summary>
+        public const int TestProtocolMaxStringLength = TestContentMaxStringLength*2 + 100;
 
-        public const int PathsMaxStringLength = 5000;
         /// <summary>
         /// also used for the server message
         /// </summary>
-        public const int NotesMaxStringLength = 1000;
+        public const int NotesMaxStringLength = 10000;
         
         
         /// <summary>
@@ -419,7 +421,7 @@ namespace ClientServer.Db
             //old fk ExerciseId1 --> delete...
             m.Entity<Exercise>()
                 .HasOne(p => p.MetaData)
-                .WithOne()
+                .WithOne(p => p.Exercise)
                 .HasForeignKey<MetaData>(p => p.ExerciseId)
                 .IsRequired()
                 .OnDelete(DeleteBehavior.Cascade)
diff --git a/src/ClientServer/Migrations/20160824181544_init.Designer.cs b/src/ClientServer/Migrations/20160824181544_init.Designer.cs
deleted file mode 100644
index 5d41f3e..0000000
--- a/src/ClientServer/Migrations/20160824181544_init.Designer.cs
+++ /dev/null
@@ -1,1324 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160824181544_init")]
-    partial class init
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanExportExerciseResults");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.LdapUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("LdapUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("LdapUserId");
-
-                    b.Property<string>("Password");
-
-                    b.Property<string>("StudentNumber");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("LdapUserId")
-                        .IsUnique();
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany()
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.LdapUser", "LdapUser")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.User", "LdapUserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160827045350_init2.Designer.cs b/src/ClientServer/Migrations/20160827045350_init2.Designer.cs
deleted file mode 100644
index 510860b..0000000
--- a/src/ClientServer/Migrations/20160827045350_init2.Designer.cs
+++ /dev/null
@@ -1,1326 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160827045350_init2")]
-    partial class init2
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanExportExerciseResults");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.LdapUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("LdapUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("LdapUserId");
-
-                    b.Property<string>("Password");
-
-                    b.Property<string>("StudentNumber");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("LdapUserId")
-                        .IsUnique();
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany()
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.LdapUser", "LdapUser")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.User", "LdapUserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160827045350_init2.cs b/src/ClientServer/Migrations/20160827045350_init2.cs
deleted file mode 100644
index 6628773..0000000
--- a/src/ClientServer/Migrations/20160827045350_init2.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class init2 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "UseWrapping",
-                table: "CodeEditorSettings",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "UseWrapping",
-                table: "CodeEditorSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs b/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
deleted file mode 100644
index f736968..0000000
--- a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
+++ /dev/null
@@ -1,1328 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160831154002_userSettingsTheme")]
-    partial class userSettingsTheme
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanExportExerciseResults");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.LdapUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("LdapUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("LdapUserId");
-
-                    b.Property<string>("Password");
-
-                    b.Property<string>("StudentNumber");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("LdapUserId")
-                        .IsUnique();
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany()
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.LdapUser", "LdapUser")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.User", "LdapUserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.cs b/src/ClientServer/Migrations/20160831154002_userSettingsTheme.cs
deleted file mode 100644
index 435ea4d..0000000
--- a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class userSettingsTheme : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "Theme",
-                table: "UserSettingses",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Theme",
-                table: "UserSettingses");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160903141707_init4.Designer.cs b/src/ClientServer/Migrations/20160903141707_init4.Designer.cs
deleted file mode 100644
index c2eebf8..0000000
--- a/src/ClientServer/Migrations/20160903141707_init4.Designer.cs
+++ /dev/null
@@ -1,1335 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160903141707_init4")]
-    partial class init4
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanExportExerciseResults");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.LdapUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("LdapUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("LdapUserId");
-
-                    b.Property<string>("Password");
-
-                    b.Property<string>("StudentNumber");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("LdapUserId")
-                        .IsUnique();
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.LdapUser", "LdapUser")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.User", "LdapUserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160903141707_init4.cs b/src/ClientServer/Migrations/20160903141707_init4.cs
deleted file mode 100644
index a5dbf2e..0000000
--- a/src/ClientServer/Migrations/20160903141707_init4.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class init4 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "HadAutomaticAssessmentErrors",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "HasAutomaticAssessmentFinished",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "HasAutomaticAssessmentStarted",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AlterColumn<int>(
-                name: "SolutionVersionId",
-                table: "SolutionAssessment",
-                nullable: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId",
-                unique: true);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId",
-                principalTable: "SolutionVersions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropColumn(
-                name: "HadAutomaticAssessmentErrors",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "HasAutomaticAssessmentFinished",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "HasAutomaticAssessmentStarted",
-                table: "ExerciseReleases");
-
-            migrationBuilder.AlterColumn<int>(
-                name: "SolutionVersionId",
-                table: "SolutionAssessment",
-                nullable: false);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId",
-                principalTable: "SolutionVersions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160906195429_init5.Designer.cs b/src/ClientServer/Migrations/20160906195429_init5.Designer.cs
deleted file mode 100644
index 780b520..0000000
--- a/src/ClientServer/Migrations/20160906195429_init5.Designer.cs
+++ /dev/null
@@ -1,1331 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160906195429_init5")]
-    partial class init5
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.LdapUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("LdapUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("LdapUserId");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("LdapUserId")
-                        .IsUnique();
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.LdapUser", "LdapUser")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.User", "LdapUserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160906195429_init5.cs b/src/ClientServer/Migrations/20160906195429_init5.cs
deleted file mode 100644
index 61c878e..0000000
--- a/src/ClientServer/Migrations/20160906195429_init5.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class init5 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "StudentNumber",
-                table: "Users");
-
-            migrationBuilder.DropColumn(
-                name: "CanExportExerciseResults",
-                table: "GroupRolePermissions");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "StudentNumber",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "CanExportExerciseResults",
-                table: "GroupRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921124646_final1.Designer.cs b/src/ClientServer/Migrations/20160921124646_final1.Designer.cs
deleted file mode 100644
index 77c1452..0000000
--- a/src/ClientServer/Migrations/20160921124646_final1.Designer.cs
+++ /dev/null
@@ -1,1358 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160921124646_final1")]
-    partial class final1
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .IsRequired();
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921124646_final1.cs b/src/ClientServer/Migrations/20160921124646_final1.cs
deleted file mode 100644
index 2eb749b..0000000
--- a/src/ClientServer/Migrations/20160921124646_final1.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class final1 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Users_LdapUsers_LdapUserId",
-                table: "Users");
-
-            migrationBuilder.DropIndex(
-                name: "IX_Users_LdapUserId",
-                table: "Users");
-
-            migrationBuilder.DropColumn(
-                name: "LdapUserId",
-                table: "Users");
-
-            migrationBuilder.DropTable(
-                name: "LdapUsers");
-
-            migrationBuilder.CreateTable(
-                name: "ExternalUsers",
-                columns: table => new
-                {
-                    ExternalId = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    Email = table.Column<string>(nullable: true),
-                    FirstName = table.Column<string>(nullable: true),
-                    LastName = table.Column<string>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    NeedToRefreshData = table.Column<bool>(nullable: false),
-                    Token = table.Column<string>(nullable: true),
-                    UserId = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ExternalUsers", x => x.ExternalId);
-                    table.ForeignKey(
-                        name: "FK_ExternalUsers_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.AddColumn<bool>(
-                name: "CanChangeUserData",
-                table: "SystemRolePermissions",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<string>(
-                name: "HtmlColor",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "HtmlIcon",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "RunAlsoNormalTests",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "ShouldAutomaticAssessSubmissions",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                nullable: false);
-
-            migrationBuilder.AddUniqueConstraint(
-                name: "Unique_Tag",
-                table: "Tags",
-                column: "DisplayName");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ExternalUsers_UserId",
-                table: "ExternalUsers",
-                column: "UserId",
-                unique: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropUniqueConstraint(
-                name: "Unique_Tag",
-                table: "Tags");
-
-            migrationBuilder.DropColumn(
-                name: "CanChangeUserData",
-                table: "SystemRolePermissions");
-
-            migrationBuilder.DropColumn(
-                name: "HtmlColor",
-                table: "Tags");
-
-            migrationBuilder.DropColumn(
-                name: "HtmlIcon",
-                table: "Tags");
-
-            migrationBuilder.DropColumn(
-                name: "RunAlsoNormalTests",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "ShouldAutomaticAssessSubmissions",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropTable(
-                name: "ExternalUsers");
-
-            migrationBuilder.CreateTable(
-                name: "LdapUsers",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_LdapUsers", x => x.Id);
-                });
-
-            migrationBuilder.AddColumn<int>(
-                name: "LdapUserId",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Users_LdapUserId",
-                table: "Users",
-                column: "LdapUserId",
-                unique: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Users_LdapUsers_LdapUserId",
-                table: "Users",
-                column: "LdapUserId",
-                principalTable: "LdapUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921130105_final2.Designer.cs b/src/ClientServer/Migrations/20160921130105_final2.Designer.cs
deleted file mode 100644
index 014db0d..0000000
--- a/src/ClientServer/Migrations/20160921130105_final2.Designer.cs
+++ /dev/null
@@ -1,1358 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160921130105_final2")]
-    partial class final2
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .IsRequired();
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921130105_final2.cs b/src/ClientServer/Migrations/20160921130105_final2.cs
deleted file mode 100644
index 70817d2..0000000
--- a/src/ClientServer/Migrations/20160921130105_final2.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    
-    public partial class final2 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            //added SolutionVersion.Solution back property...
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921155214_final3.Designer.cs b/src/ClientServer/Migrations/20160921155214_final3.Designer.cs
deleted file mode 100644
index 246c6db..0000000
--- a/src/ClientServer/Migrations/20160921155214_final3.Designer.cs
+++ /dev/null
@@ -1,1358 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160921155214_final3")]
-    partial class final3
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .IsRequired();
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160921155214_final3.cs b/src/ClientServer/Migrations/20160921155214_final3.cs
deleted file mode 100644
index d2f9564..0000000
--- a/src/ClientServer/Migrations/20160921155214_final3.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class final3 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "UserId",
-                table: "ExternalUsers",
-                nullable: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "UserId",
-                table: "ExternalUsers",
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160923095756_final4.Designer.cs b/src/ClientServer/Migrations/20160923095756_final4.Designer.cs
deleted file mode 100644
index ffa5752..0000000
--- a/src/ClientServer/Migrations/20160923095756_final4.Designer.cs
+++ /dev/null
@@ -1,1362 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20160923095756_final4")]
-    partial class final4
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .IsRequired();
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20160923095756_final4.cs b/src/ClientServer/Migrations/20160923095756_final4.cs
deleted file mode 100644
index 2279b2c..0000000
--- a/src/ClientServer/Migrations/20160923095756_final4.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class final4 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "ExternalUsers",
-                nullable: false);
-
-            migrationBuilder.AddUniqueConstraint(
-                name: "Unique_ExternalToken",
-                table: "ExternalUsers",
-                column: "Token");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropUniqueConstraint(
-                name: "Unique_ExternalToken",
-                table: "ExternalUsers");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "ExternalUsers",
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs b/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
deleted file mode 100644
index 6f47853..0000000
--- a/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
+++ /dev/null
@@ -1,1364 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20161001124636_tagPermission")]
-    partial class tagPermission
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .IsRequired();
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001124636_tagPermission.cs b/src/ClientServer/Migrations/20161001124636_tagPermission.cs
deleted file mode 100644
index 47a7dfb..0000000
--- a/src/ClientServer/Migrations/20161001124636_tagPermission.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class tagPermission : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "CanManageTags",
-                table: "SystemRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanManageTags",
-                table: "SystemRolePermissions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs b/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
deleted file mode 100644
index 6bc4209..0000000
--- a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
+++ /dev/null
@@ -1,1363 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20161001140957_tagDisplayName2")]
-    partial class tagDisplayName2
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.cs b/src/ClientServer/Migrations/20161001140957_tagDisplayName2.cs
deleted file mode 100644
index 02bdb86..0000000
--- a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class tagDisplayName2 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropUniqueConstraint(
-                name: "Unique_Tag",
-                table: "Tags");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.CreateIndex(
-                name: "Unique_Tag",
-                table: "Tags",
-                column: "DisplayName");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropIndex(
-                name: "Unique_Tag",
-                table: "Tags");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                nullable: false);
-
-            migrationBuilder.AddUniqueConstraint(
-                name: "Unique_Tag",
-                table: "Tags",
-                column: "DisplayName");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs b/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
deleted file mode 100644
index 9f6ba77..0000000
--- a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
+++ /dev/null
@@ -1,1364 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20161001142650_deleteTagCascade")]
-    partial class deleteTagCascade
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.cs b/src/ClientServer/Migrations/20161001142650_deleteTagCascade.cs
deleted file mode 100644
index b95489f..0000000
--- a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class deleteTagCascade : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_TagWithMetaDatas_Tags_TagId",
-                table: "TagWithMetaDatas");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_TagWithMetaDatas_Tags_TagId",
-                table: "TagWithMetaDatas",
-                column: "TagId",
-                principalTable: "Tags",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_TagWithMetaDatas_Tags_TagId",
-                table: "TagWithMetaDatas");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_TagWithMetaDatas_Tags_TagId",
-                table: "TagWithMetaDatas",
-                column: "TagId",
-                principalTable: "Tags",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs b/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
deleted file mode 100644
index c156237..0000000
--- a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
+++ /dev/null
@@ -1,1366 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20161220124855_ExerciseAddedNote")]
-    partial class ExerciseAddedNote
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.cs b/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.cs
deleted file mode 100644
index d66bf78..0000000
--- a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ExerciseAddedNote : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "Note",
-                table: "Exercises",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Note",
-                table: "Exercises");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs b/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
deleted file mode 100644
index 231bf29..0000000
--- a/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
+++ /dev/null
@@ -1,1396 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20170112222129_authTokens")]
-    partial class authTokens
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20170112222129_authTokens.cs b/src/ClientServer/Migrations/20170112222129_authTokens.cs
deleted file mode 100644
index e6e0725..0000000
--- a/src/ClientServer/Migrations/20170112222129_authTokens.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class authTokens : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "AuthTokens",
-                columns: table => new
-                {
-                    UserId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    ExpirationDateTime = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    RandomSecret = table.Column<string>(nullable: true),
-                    UserAuthToken = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_AuthTokens", x => x.UserId);
-                    table.ForeignKey(
-                        name: "FK_AuthTokens_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AuthTokens_UserId",
-                table: "AuthTokens",
-                column: "UserId",
-                unique: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "AuthTokens");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20170307190625_lang.Designer.cs b/src/ClientServer/Migrations/20170307190625_lang.Designer.cs
deleted file mode 100644
index 5d11ad7..0000000
--- a/src/ClientServer/Migrations/20170307190625_lang.Designer.cs
+++ /dev/null
@@ -1,1398 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20170307190625_lang")]
-    partial class lang
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20170307190625_lang.cs b/src/ClientServer/Migrations/20170307190625_lang.cs
deleted file mode 100644
index 275187a..0000000
--- a/src/ClientServer/Migrations/20170307190625_lang.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class lang : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "LangShortcut",
-                table: "Langs",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "LangShortcut",
-                table: "Langs");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs b/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
deleted file mode 100755
index 653a853..0000000
--- a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
+++ /dev/null
@@ -1,1400 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171009190359_tagBackgroundColor")]
-    partial class tagBackgroundColor
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.cs b/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.cs
deleted file mode 100755
index acaa349..0000000
--- a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class tagBackgroundColor : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "HtmlBackgroundColor",
-                table: "Tags",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "HtmlBackgroundColor",
-                table: "Tags");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs b/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
deleted file mode 100755
index 7be5ef6..0000000
--- a/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
+++ /dev/null
@@ -1,1402 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171009191709_tagDescription")]
-    partial class tagDescription
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171009191709_tagDescription.cs b/src/ClientServer/Migrations/20171009191709_tagDescription.cs
deleted file mode 100755
index 74ee397..0000000
--- a/src/ClientServer/Migrations/20171009191709_tagDescription.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class tagDescription : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "Description",
-                table: "Tags",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Description",
-                table: "Tags");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs b/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
deleted file mode 100644
index 5a2a679..0000000
--- a/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
+++ /dev/null
@@ -1,1404 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171012120923_tutorFreedback")]
-    partial class tutorFreedback
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171012120923_tutorFreedback.cs b/src/ClientServer/Migrations/20171012120923_tutorFreedback.cs
deleted file mode 100644
index 010087b..0000000
--- a/src/ClientServer/Migrations/20171012120923_tutorFreedback.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class tutorFreedback : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "Note",
-                table: "SolutionAssessment",
-                newName:"NoteForOtherTutors");
-
-            migrationBuilder.AddColumn<string>(
-                name: "FeedbackForStudent",
-                table: "SolutionAssessment",
-                nullable: true);
-
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "FeedbackForStudent",
-                table: "SolutionAssessment");
-
-            migrationBuilder.RenameColumn(
-                name: "NoteForOtherTutors",
-                table: "SolutionAssessment",
-                newName: "Note");
-
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs b/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
deleted file mode 100644
index b735cab..0000000
--- a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
+++ /dev/null
@@ -1,1404 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171015132006_enabledNullableAssessmentPoints")]
-    partial class enabledNullableAssessmentPoints
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.cs b/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.cs
deleted file mode 100644
index 5d982fb..0000000
--- a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class enabledNullableAssessmentPoints : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "SubmitTestPoints",
-                table: "SolutionAssessment",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<int>(
-                name: "NormalTestPoints",
-                table: "SolutionAssessment",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "SubmitTestPoints",
-                table: "SolutionAssessment",
-                nullable: false);
-
-            migrationBuilder.AlterColumn<int>(
-                name: "NormalTestPoints",
-                table: "SolutionAssessment",
-                nullable: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs b/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
deleted file mode 100755
index c7da8f5..0000000
--- a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
+++ /dev/null
@@ -1,1407 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171025160923_uniqueAuthToken")]
-    partial class uniqueAuthToken
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.cs b/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.cs
deleted file mode 100755
index e30ae10..0000000
--- a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class uniqueAuthToken : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateIndex(
-                name: "IX_AuthTokens_UserAuthToken",
-                table: "AuthTokens",
-                column: "UserAuthToken",
-                unique: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropIndex(
-                name: "IX_AuthTokens_UserAuthToken",
-                table: "AuthTokens");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs b/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
deleted file mode 100755
index 86ecc3c..0000000
--- a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
+++ /dev/null
@@ -1,1410 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171106184650_participationShouldNotCount")]
-    partial class participationShouldNotCount
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.cs b/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.cs
deleted file mode 100755
index da909c1..0000000
--- a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class participationShouldNotCount : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "ShouldNotCount",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "ShouldNotCount",
-                table: "ExerciseReleaseWithUserAsParticipations");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs b/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
deleted file mode 100755
index 8d11c6d..0000000
--- a/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
+++ /dev/null
@@ -1,1685 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171109144627_customProjects")]
-    partial class customProjects
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171109144627_customProjects.cs b/src/ClientServer/Migrations/20171109144627_customProjects.cs
deleted file mode 100755
index 7c6f2d2..0000000
--- a/src/ClientServer/Migrations/20171109144627_customProjects.cs
+++ /dev/null
@@ -1,347 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class customProjects : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "CustomProjects",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    LastEditorPLangId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    UserId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjects", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjects_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectDescriptions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectDescriptions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectDescriptions_CustomProjects_CustomProjectId",
-                        column: x => x.CustomProjectId,
-                        principalTable: "CustomProjects",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectTests",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectId = table.Column<int>(nullable: false),
-                    DisplayIndex = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    TestSettingsId = table.Column<int>(nullable: false),
-                    TestTypeId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectTests", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTests_CustomProjects_CustomProjectId",
-                        column: x => x.CustomProjectId,
-                        principalTable: "CustomProjects",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTests_TestCaseSettingses_TestSettingsId",
-                        column: x => x.TestSettingsId,
-                        principalTable: "TestCaseSettingses",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTests_TestTypes_TestTypeId",
-                        column: x => x.TestTypeId,
-                        principalTable: "TestTypes",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectTestAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectTestId = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectTestAssets", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTestAssets_CustomProjectTests_CustomProjectTestId",
-                        column: x => x.CustomProjectTestId,
-                        principalTable: "CustomProjectTests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectSolutions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainFileId = table.Column<int>(nullable: true),
-                    PLangId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectSolutions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectSolutions_CustomProjects_CustomProjectId",
-                        column: x => x.CustomProjectId,
-                        principalTable: "CustomProjects",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectSolutions_PLangs_PLangId",
-                        column: x => x.PLangId,
-                        principalTable: "PLangs",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectSolutionFiles",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectSolutionId = table.Column<int>(nullable: false),
-                    DisplayIndex = table.Column<int>(nullable: false),
-                    FileNameWithExtension = table.Column<string>(nullable: true),
-                    IsDisplayed = table.Column<bool>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectSolutionFiles", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectSolutionFiles_CustomProjectSolutions_CustomProjectSolutionId",
-                        column: x => x.CustomProjectSolutionId,
-                        principalTable: "CustomProjectSolutions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectTestWithSolutionAsTestResults",
-                columns: table => new
-                {
-                    CustomProjectSolutionId = table.Column<int>(nullable: false),
-                    CustomProjectTestId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectTestWithSolutionAsTestResults", x => new { x.CustomProjectSolutionId, x.CustomProjectTestId });
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTestWithSolutionAsTestResults_CustomProjectSolutions_CustomProjectSolutionId",
-                        column: x => x.CustomProjectSolutionId,
-                        principalTable: "CustomProjectSolutions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTestWithSolutionAsTestResults_CustomProjectTests_CustomProjectTestId",
-                        column: x => x.CustomProjectTestId,
-                        principalTable: "CustomProjectTests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.AddColumn<int>(
-                name: "MaxCustomProjectsPerUser",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 10);
-
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectDescriptionId",
-                table: "Assets",
-                nullable: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Assets_CustomProjectDescriptionId",
-                table: "Assets",
-                column: "CustomProjectDescriptionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjects_UserId",
-                table: "CustomProjects",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectDescriptions_CustomProjectId",
-                table: "CustomProjectDescriptions",
-                column: "CustomProjectId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectSolutions_CustomProjectId",
-                table: "CustomProjectSolutions",
-                column: "CustomProjectId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectSolutions_MainFileId",
-                table: "CustomProjectSolutions",
-                column: "MainFileId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectSolutions_PLangId",
-                table: "CustomProjectSolutions",
-                column: "PLangId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectSolutionFiles_CustomProjectSolutionId",
-                table: "CustomProjectSolutionFiles",
-                column: "CustomProjectSolutionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTests_CustomProjectId",
-                table: "CustomProjectTests",
-                column: "CustomProjectId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTests_TestSettingsId",
-                table: "CustomProjectTests",
-                column: "TestSettingsId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTests_TestTypeId",
-                table: "CustomProjectTests",
-                column: "TestTypeId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestAssets_CustomProjectTestId",
-                table: "CustomProjectTestAssets",
-                column: "CustomProjectTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestWithSolutionAsTestResults_CustomProjectSolutionId",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                column: "CustomProjectSolutionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestWithSolutionAsTestResults_CustomProjectTestId",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                column: "CustomProjectTestId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Assets_CustomProjectDescriptions_CustomProjectDescriptionId",
-                table: "Assets",
-                column: "CustomProjectDescriptionId",
-                principalTable: "CustomProjectDescriptions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_CustomProjectSolutions_CustomProjectSolutionFiles_MainFileId",
-                table: "CustomProjectSolutions",
-                column: "MainFileId",
-                principalTable: "CustomProjectSolutionFiles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Assets_CustomProjectDescriptions_CustomProjectDescriptionId",
-                table: "Assets");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_CustomProjectSolutions_CustomProjects_CustomProjectId",
-                table: "CustomProjectSolutions");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_CustomProjectSolutions_CustomProjectSolutionFiles_MainFileId",
-                table: "CustomProjectSolutions");
-
-            migrationBuilder.DropIndex(
-                name: "IX_Assets_CustomProjectDescriptionId",
-                table: "Assets");
-
-            migrationBuilder.DropColumn(
-                name: "MaxCustomProjectsPerUser",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "CustomProjectDescriptionId",
-                table: "Assets");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectDescriptions");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectTestAssets");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectTestWithSolutionAsTestResults");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectTests");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjects");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectSolutionFiles");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectSolutions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs b/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
deleted file mode 100755
index 2123e89..0000000
--- a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
+++ /dev/null
@@ -1,1687 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171110153042_customProjectTestsWeights")]
-    partial class customProjectTestsWeights
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.cs b/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.cs
deleted file mode 100755
index 3b0e7d2..0000000
--- a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class customProjectTestsWeights : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "Weight",
-                table: "CustomProjectTests",
-                nullable: false,
-                defaultValue: 0);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Weight",
-                table: "CustomProjectTests");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs b/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
deleted file mode 100755
index 6a2a60b..0000000
--- a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
+++ /dev/null
@@ -1,1689 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20171229135558_dashboardSystemRolePermission")]
-    partial class dashboardSystemRolePermission
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.cs b/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.cs
deleted file mode 100755
index 60d459d..0000000
--- a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class dashboardSystemRolePermission : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "CanViewDashboard",
-                table: "SystemRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanViewDashboard",
-                table: "SystemRolePermissions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs b/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
deleted file mode 100755
index 4e5dcc8..0000000
--- a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
+++ /dev/null
@@ -1,1693 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180214130057_ReleaseEExamOptions")]
-    partial class ReleaseEExamOptions
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.cs b/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.cs
deleted file mode 100755
index a43fdbf..0000000
--- a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ReleaseEExamOptions : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "HideInOverviews",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "ShouldClearClipboard",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "HideInOverviews",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "ShouldClearClipboard",
-                table: "ExerciseReleases");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs b/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
deleted file mode 100755
index 270ddcd..0000000
--- a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
+++ /dev/null
@@ -1,1695 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180215112957_ReleaseHideSiteHeaderBar")]
-    partial class ReleaseHideSiteHeaderBar
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.cs b/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.cs
deleted file mode 100755
index 8b22758..0000000
--- a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ReleaseHideSiteHeaderBar : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "HideSiteHeaderBar",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "HideSiteHeaderBar",
-                table: "ExerciseReleases");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs b/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
deleted file mode 100755
index 92d3d40..0000000
--- a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
+++ /dev/null
@@ -1,1789 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180912160339_removeSolutionVersion1")]
-    partial class removeSolutionVersion1
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.cs b/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.cs
deleted file mode 100755
index 4da9dab..0000000
--- a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class removeSolutionVersion1 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "CustomTestWithSingleSolutionAsTestResult",
-                columns: table => new
-                {
-                    CustomTestId = table.Column<int>(nullable: false),
-                    SolutionUserId = table.Column<int>(nullable: false),
-                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
-                    SolutionPLangId = table.Column<int>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomTestWithSingleSolutionAsTestResult", x => new { x.CustomTestId, x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId });
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithSingleSolutionAsTestResult_CustomTest_CustomTestId",
-                        column: x => x.CustomTestId,
-                        principalTable: "CustomTest",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithSingleSolutionAsTestResult_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
-                        principalTable: "Solutions",
-                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "TestWithSingleSolutionAsTestResult",
-                columns: table => new
-                {
-                    TestId = table.Column<int>(nullable: false),
-                    SolutionUserId = table.Column<int>(nullable: false),
-                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
-                    SolutionPLangId = table.Column<int>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_TestWithSingleSolutionAsTestResult", x => new { x.TestId, x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId });
-                    table.ForeignKey(
-                        name: "FK_TestWithSingleSolutionAsTestResult_Tests_TestId",
-                        column: x => x.TestId,
-                        principalTable: "Tests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_TestWithSingleSolutionAsTestResult_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
-                        principalTable: "Solutions",
-                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.AddColumn<int>(
-                name: "SolutionExerciseReleaseId",
-                table: "SolutionFiles",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SolutionPLangId",
-                table: "SolutionFiles",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SolutionUserId",
-                table: "SolutionFiles",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "MainFileId",
-                table: "Solutions",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "Note",
-                table: "Solutions",
-                nullable: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSingleSolutionAsTestResult_CustomTestId",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                column: "CustomTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSingleSolutionAsTestResult_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithSingleSolutionAsTestResult_TestId",
-                table: "TestWithSingleSolutionAsTestResult",
-                column: "TestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithSingleSolutionAsTestResult_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "TestWithSingleSolutionAsTestResult",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "SolutionExerciseReleaseId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropColumn(
-                name: "SolutionPLangId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropColumn(
-                name: "SolutionUserId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropColumn(
-                name: "MainFileId",
-                table: "Solutions");
-
-            migrationBuilder.DropColumn(
-                name: "Note",
-                table: "Solutions");
-
-            migrationBuilder.DropTable(
-                name: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropTable(
-                name: "TestWithSingleSolutionAsTestResult");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs b/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
deleted file mode 100755
index bcd52be..0000000
--- a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
+++ /dev/null
@@ -1,1804 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180912171554_removeSolutionVersion2")]
-    partial class removeSolutionVersion2
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.cs b/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.cs
deleted file mode 100755
index 044d01e..0000000
--- a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class removeSolutionVersion2 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionFiles_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionFiles",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Solutions_MainFileId",
-                table: "Solutions",
-                column: "MainFileId",
-                unique: true);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Solutions_SolutionFiles_MainFileId",
-                table: "Solutions",
-                column: "MainFileId",
-                principalTable: "SolutionFiles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionFiles_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionFiles",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" },
-                principalTable: "Solutions",
-                principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                onDelete: ReferentialAction.Cascade);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Solutions_SolutionFiles_MainFileId",
-                table: "Solutions");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SolutionFiles_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropIndex(
-                name: "IX_SolutionFiles_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropIndex(
-                name: "IX_Solutions_MainFileId",
-                table: "Solutions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs b/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
deleted file mode 100755
index 17ca2dd..0000000
--- a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
+++ /dev/null
@@ -1,1812 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180912182512_removeSolutionVersion3")]
-    partial class removeSolutionVersion3
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionVersionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.ToTable("CustomTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("MainSolutionVersionid");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SolutionVersionId");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId")
-                        .IsUnique();
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("SolutionVersionId")
-                        .IsRequired();
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("SolutionExerciseReleaseId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionPLangId")
-                        .IsRequired();
-
-                    b.Property<int?>("SolutionUserId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionVersions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionVersionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionVersionId");
-
-                    b.HasIndex("SolutionVersionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxSolutionVersionsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionAssessment", "SolutionVersionId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionVersion", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.SolutionVersion", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionVersions")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionVersion", "SolutionVersion")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionVersionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.cs b/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.cs
deleted file mode 100755
index 3acde87..0000000
--- a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class removeSolutionVersion3 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<DateTime>(
-                name: "CreatedAt",
-                table: "TestWithSingleSolutionAsTestResult",
-                nullable: false,
-                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
-
-            migrationBuilder.AddColumn<DateTime>(
-                name: "LastUpdatedAt",
-                table: "TestWithSingleSolutionAsTestResult",
-                nullable: false,
-                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
-
-            migrationBuilder.AddColumn<DateTime>(
-                name: "CreatedAt",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: false,
-                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
-
-            migrationBuilder.AddColumn<DateTime>(
-                name: "LastUpdatedAt",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: false,
-                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CreatedAt",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "LastUpdatedAt",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "CreatedAt",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "LastUpdatedAt",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs b/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
deleted file mode 100755
index 2d1b9ce..0000000
--- a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
+++ /dev/null
@@ -1,1656 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180913125543_removeSolutionVersion4")]
-    partial class removeSolutionVersion4
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToMe");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.cs b/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.cs
deleted file mode 100755
index defa883..0000000
--- a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class removeSolutionVersion4 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SolutionFiles_SolutionVersions_SolutionVersionId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropIndex(
-                name: "IX_SolutionFiles_SolutionVersionId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropColumn(
-                name: "MaxSolutionVersionsPerUser",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "SolutionVersionId",
-                table: "SolutionFiles");
-
-            migrationBuilder.DropColumn(
-                name: "SolutionVersionId",
-                table: "SolutionAssessment");
-
-            migrationBuilder.DropColumn(
-                name: "MainSolutionVersionid",
-                table: "Solutions");
-
-            migrationBuilder.DropTable(
-                name: "CustomTestWithSolutionAsTestResults");
-
-            migrationBuilder.DropTable(
-                name: "TestResults");
-
-            migrationBuilder.DropTable(
-                name: "SolutionVersions");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "SolutionVersions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainFileId = table.Column<int>(nullable: true),
-                    Note = table.Column<string>(nullable: true),
-                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
-                    SolutionPLangId = table.Column<int>(nullable: false),
-                    SolutionUserId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_SolutionVersions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_SolutionVersions_SolutionFiles_MainFileId",
-                        column: x => x.MainFileId,
-                        principalTable: "SolutionFiles",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
-                    table.ForeignKey(
-                        name: "FK_SolutionVersions_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
-                        principalTable: "Solutions",
-                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomTestWithSolutionAsTestResults",
-                columns: table => new
-                {
-                    CustomTestId = table.Column<int>(nullable: false),
-                    SolutionVersionId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomTestWithSolutionAsTestResults", x => new { x.CustomTestId, x.SolutionVersionId });
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithSolutionAsTestResults_CustomTest_CustomTestId",
-                        column: x => x.CustomTestId,
-                        principalTable: "CustomTest",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithSolutionAsTestResults_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "TestResults",
-                columns: table => new
-                {
-                    TestId = table.Column<int>(nullable: false),
-                    SolutionVersionId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_TestResults", x => new { x.TestId, x.SolutionVersionId });
-                    table.ForeignKey(
-                        name: "FK_TestResults_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_TestResults_Tests_TestId",
-                        column: x => x.TestId,
-                        principalTable: "Tests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.AddColumn<int>(
-                name: "MaxSolutionVersionsPerUser",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SolutionVersionId",
-                table: "SolutionFiles",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SolutionVersionId",
-                table: "SolutionAssessment",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "MainSolutionVersionid",
-                table: "Solutions",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionFiles_SolutionVersionId",
-                table: "SolutionFiles",
-                column: "SolutionVersionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSolutionAsTestResults_CustomTestId",
-                table: "CustomTestWithSolutionAsTestResults",
-                column: "CustomTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSolutionAsTestResults_SolutionVersionId",
-                table: "CustomTestWithSolutionAsTestResults",
-                column: "SolutionVersionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionVersions_MainFileId",
-                table: "SolutionVersions",
-                column: "MainFileId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionVersions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionVersions",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestResults_SolutionVersionId",
-                table: "TestResults",
-                column: "SolutionVersionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestResults_TestId",
-                table: "TestResults",
-                column: "TestId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId",
-                principalTable: "SolutionVersions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionFiles_SolutionVersions_SolutionVersionId",
-                table: "SolutionFiles",
-                column: "SolutionVersionId",
-                principalTable: "SolutionVersions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs b/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
deleted file mode 100755
index 2c6f209..0000000
--- a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
+++ /dev/null
@@ -1,1660 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180921120340_groupRolePermissionAndUpdatedAt")]
-    partial class groupRolePermissionAndUpdatedAt
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.cs b/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.cs
deleted file mode 100755
index 3a41338..0000000
--- a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class groupRolePermissionAndUpdatedAt : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "IsOnlyVisibleToMe",
-                table: "Exercises",
-                newName: "IsOnlyVisibleToOwner");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "CanChangeGroupData",
-                table: "GroupRolePermissions",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "CanSeeOtherMembers",
-                table: "GroupRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanChangeGroupData",
-                table: "GroupRolePermissions");
-
-            migrationBuilder.DropColumn(
-                name: "CanSeeOtherMembers",
-                table: "GroupRolePermissions");
-
-            migrationBuilder.RenameColumn(
-                name: "IsOnlyVisibleToOwner",
-                table: "Exercises",
-                newName: "IsOnlyVisibleToMe"
-                );
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs b/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
deleted file mode 100755
index 3fcbd67..0000000
--- a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
+++ /dev/null
@@ -1,1827 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20180929145343_addedAfterSolution")]
-    partial class addedAfterSolution
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.cs b/src/ClientServer/Migrations/20180929145343_addedAfterSolution.cs
deleted file mode 100755
index 5cbb925..0000000
--- a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class addedAfterSolution : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "AfterSolutionFiles",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    AfterSolutionId = table.Column<int>(nullable: false),
-                    Content = table.Column<string>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayIndex = table.Column<int>(nullable: false),
-                    FileNameWithExtension = table.Column<string>(nullable: true),
-                    IsDisplayed = table.Column<bool>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    TemplateFileId = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_AfterSolutionFiles", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_AfterSolutionFiles_TemplateFiles_TemplateFileId",
-                        column: x => x.TemplateFileId,
-                        principalTable: "TemplateFiles",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "AfterSolutions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainFileId = table.Column<int>(nullable: true),
-                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
-                    SolutionPLangId = table.Column<int>(nullable: false),
-                    SolutionUserId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_AfterSolutions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_AfterSolutions_AfterSolutionFiles_MainFileId",
-                        column: x => x.MainFileId,
-                        principalTable: "AfterSolutionFiles",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
-                    table.ForeignKey(
-                        name: "FK_AfterSolutions_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
-                        principalTable: "Solutions",
-                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomTestWithAfterSolutionAsTestResults",
-                columns: table => new
-                {
-                    CustomTestId = table.Column<int>(nullable: false),
-                    AfterSolutionId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomTestWithAfterSolutionAsTestResults", x => new { x.CustomTestId, x.AfterSolutionId });
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithAfterSolutionAsTestResults_AfterSolutions_AfterSolutionId",
-                        column: x => x.AfterSolutionId,
-                        principalTable: "AfterSolutions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithAfterSolutionAsTestResults_CustomTest_CustomTestId",
-                        column: x => x.CustomTestId,
-                        principalTable: "CustomTest",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "TestWithAfterSolutionAsTestResults",
-                columns: table => new
-                {
-                    TestId = table.Column<int>(nullable: false),
-                    AfterSolutionId = table.Column<int>(nullable: false),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    HasCompiled = table.Column<bool>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Passed = table.Column<bool>(nullable: true),
-                    ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_TestWithAfterSolutionAsTestResults", x => new { x.TestId, x.AfterSolutionId });
-                    table.ForeignKey(
-                        name: "FK_TestWithAfterSolutionAsTestResults_AfterSolutions_AfterSolutionId",
-                        column: x => x.AfterSolutionId,
-                        principalTable: "AfterSolutions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_TestWithAfterSolutionAsTestResults_Tests_TestId",
-                        column: x => x.TestId,
-                        principalTable: "Tests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AfterSolutions_MainFileId",
-                table: "AfterSolutions",
-                column: "MainFileId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AfterSolutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "AfterSolutions",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" },
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AfterSolutionFiles_AfterSolutionId",
-                table: "AfterSolutionFiles",
-                column: "AfterSolutionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AfterSolutionFiles_TemplateFileId",
-                table: "AfterSolutionFiles",
-                column: "TemplateFileId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithAfterSolutionAsTestResults_AfterSolutionId",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                column: "AfterSolutionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithAfterSolutionAsTestResults_CustomTestId",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                column: "CustomTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithAfterSolutionAsTestResults_AfterSolutionId",
-                table: "TestWithAfterSolutionAsTestResults",
-                column: "AfterSolutionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithAfterSolutionAsTestResults_TestId",
-                table: "TestWithAfterSolutionAsTestResults",
-                column: "TestId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_AfterSolutionFiles_AfterSolutions_AfterSolutionId",
-                table: "AfterSolutionFiles",
-                column: "AfterSolutionId",
-                principalTable: "AfterSolutions",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_AfterSolutions_AfterSolutionFiles_MainFileId",
-                table: "AfterSolutions");
-
-            migrationBuilder.DropTable(
-                name: "CustomTestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropTable(
-                name: "TestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropTable(
-                name: "AfterSolutionFiles");
-
-            migrationBuilder.DropTable(
-                name: "AfterSolutions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs b/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
deleted file mode 100755
index 5ca63ed..0000000
--- a/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
+++ /dev/null
@@ -1,1829 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181001151109_maxCustomTests")]
-    partial class maxCustomTests
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181001151109_maxCustomTests.cs b/src/ClientServer/Migrations/20181001151109_maxCustomTests.cs
deleted file mode 100755
index 1d0499e..0000000
--- a/src/ClientServer/Migrations/20181001151109_maxCustomTests.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class maxCustomTests : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "MaxCustomTestsPerParticipation",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 10);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "MaxCustomTestsPerParticipation",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs b/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
deleted file mode 100755
index 4328f7b..0000000
--- a/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
+++ /dev/null
@@ -1,1831 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181004180755_csrfToken")]
-    partial class csrfToken
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181004180755_csrfToken.cs b/src/ClientServer/Migrations/20181004180755_csrfToken.cs
deleted file mode 100755
index 6dbd091..0000000
--- a/src/ClientServer/Migrations/20181004180755_csrfToken.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class csrfToken : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "CsrfToken",
-                table: "AuthTokens",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CsrfToken",
-                table: "AuthTokens");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs b/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
deleted file mode 100755
index 99411d8..0000000
--- a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
+++ /dev/null
@@ -1,1831 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181008183904_UserSettingsAllowRemoveLang")]
-    partial class UserSettingsAllowRemoveLang
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeGroups");
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.cs b/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.cs
deleted file mode 100755
index 82f40e2..0000000
--- a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class UserSettingsAllowRemoveLang : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "LangId",
-                table: "UserSettingses",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "LangId",
-                table: "UserSettingses",
-                nullable: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs b/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
deleted file mode 100755
index 0ab7523..0000000
--- a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
+++ /dev/null
@@ -1,1829 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181011102314_removedSystemPermissionCanEditGroup")]
-    partial class removedSystemPermissionCanEditGroup
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.ContentType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Type");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("ContentTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl");
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<string>("ShortDescription");
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired();
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note");
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note");
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent");
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors");
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol");
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("HtmlBackgroundColor");
-
-                    b.Property<string>("HtmlColor");
-
-                    b.Property<string>("HtmlIcon");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType");
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut");
-
-                    b.Property<string>("Language");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("InternalName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken");
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret");
-
-                    b.Property<string>("UserAuthToken");
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email");
-
-                    b.Property<string>("FirstName");
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password");
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName");
-
-                    b.Property<string>("Email");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.cs b/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.cs
deleted file mode 100755
index b4ea33c..0000000
--- a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class removedSystemPermissionCanEditGroup : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanChangeGroups",
-                table: "SystemRolePermissions");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "CanChangeGroups",
-                table: "SystemRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs b/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
deleted file mode 100755
index 3539a26..0000000
--- a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
+++ /dev/null
@@ -1,1882 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181012124603_SetStringMaxLengths")]
-    partial class SetStringMaxLengths
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.cs b/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.cs
deleted file mode 100755
index 0bcfe4d..0000000
--- a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.cs
+++ /dev/null
@@ -1,792 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class SetStringMaxLengths : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "ContentTypes");
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "UserGroups",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "UserGroups",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "Users",
-                maxLength: 500,
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Password",
-                table: "Users",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LastName",
-                table: "Users",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FirstName",
-                table: "Users",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "Users",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "SystemRoles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "SystemRoles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Theme",
-                table: "UserSettingses",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Theme",
-                table: "CodeEditorSettings",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "GroupRoles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "ExternalUsers",
-                maxLength: 500,
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LastName",
-                table: "ExternalUsers",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FirstName",
-                table: "ExternalUsers",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "ExternalUsers",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "UserAuthToken",
-                table: "AuthTokens",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "RandomSecret",
-                table: "AuthTokens",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "CsrfToken",
-                table: "AuthTokens",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "InternalName",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Language",
-                table: "Langs",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LangShortcut",
-                table: "Langs",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "InternalName",
-                table: "TestTypes",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "TestTypes",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "TestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "TestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tests",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "Tests",
-                maxLength: 5000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "CustomTestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomTestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomTest",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomTest",
-                maxLength: 5000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "TemplateFiles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "TemplateFiles",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlIcon",
-                table: "Tags",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlColor",
-                table: "Tags",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlBackgroundColor",
-                table: "Tags",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Description",
-                table: "Tags",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "TestWithSingleSolutionAsTestResult",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "SolutionFiles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "SolutionFiles",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "NoteForOtherTutors",
-                table: "SolutionAssessment",
-                maxLength: 1000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FeedbackForStudent",
-                table: "SolutionAssessment",
-                maxLength: 1000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "Solutions",
-                maxLength: 1000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "ExerciseReleases",
-                maxLength: 1000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "GeneratedCode",
-                table: "ExerciseReleases",
-                maxLength: 500,
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "ExerciseDescriptions",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "ShortDescription",
-                table: "Exercises",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "Exercises",
-                maxLength: 1000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Exercises",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "Assets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Assets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "AssetUrl",
-                table: "Assets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "TestWithAfterSolutionAsTestResults",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "AfterSolutionFiles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "AfterSolutionFiles",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "CustomProjectTestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjectTestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjectTests",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectTests",
-                maxLength: 5000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "CustomProjectSolutionFiles",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectSolutionFiles",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectDescriptions",
-                maxLength: 10000,
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjects",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "ContentTypes",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Type = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ContentTypes", x => x.Id);
-                });
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "UserGroups",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "UserGroups",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "Users",
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Password",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LastName",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FirstName",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "Users",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "SystemRoles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "SystemRoles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Theme",
-                table: "UserSettingses",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Theme",
-                table: "CodeEditorSettings",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "GroupRoles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Token",
-                table: "ExternalUsers",
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LastName",
-                table: "ExternalUsers",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FirstName",
-                table: "ExternalUsers",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Email",
-                table: "ExternalUsers",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "UserAuthToken",
-                table: "AuthTokens",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "RandomSecret",
-                table: "AuthTokens",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "CsrfToken",
-                table: "AuthTokens",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "InternalName",
-                table: "PLangs",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "PLangs",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Language",
-                table: "Langs",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "LangShortcut",
-                table: "Langs",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "InternalName",
-                table: "TestTypes",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "TestTypes",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "TestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "TestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tests",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "Tests",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "CustomTestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomTestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomTest",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomTest",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "TemplateFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "TemplateFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlIcon",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlColor",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "HtmlBackgroundColor",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Description",
-                table: "Tags",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "TestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "SolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "SolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "NoteForOtherTutors",
-                table: "SolutionAssessment",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FeedbackForStudent",
-                table: "SolutionAssessment",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "Solutions",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "ExerciseReleases",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "GeneratedCode",
-                table: "ExerciseReleases",
-                nullable: false);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "ExerciseDescriptions",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "ShortDescription",
-                table: "Exercises",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Note",
-                table: "Exercises",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Exercises",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "Assets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "Assets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "AssetUrl",
-                table: "Assets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "TestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "AfterSolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "AfterSolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Protocol",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "MimeType",
-                table: "CustomProjectTestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjectTestAssets",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjectTests",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectTests",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "FileNameWithExtension",
-                table: "CustomProjectSolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectSolutionFiles",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "Content",
-                table: "CustomProjectDescriptions",
-                nullable: true);
-
-            migrationBuilder.AlterColumn<string>(
-                name: "DisplayName",
-                table: "CustomProjects",
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs b/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
deleted file mode 100755
index a7bc0a9..0000000
--- a/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
+++ /dev/null
@@ -1,1885 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181026193143_ServerMessage")]
-    partial class ServerMessage
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181026193143_ServerMessage.cs b/src/ClientServer/Migrations/20181026193143_ServerMessage.cs
deleted file mode 100755
index 9adb661..0000000
--- a/src/ClientServer/Migrations/20181026193143_ServerMessage.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ServerMessage : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "CurrentServerMessage",
-                table: "SystemSettings",
-                maxLength: 1000,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CurrentServerMessage",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs b/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
deleted file mode 100755
index f8b7577..0000000
--- a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
+++ /dev/null
@@ -1,1887 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181027121021_ParticipationLockSolutionsFlag")]
-    partial class ParticipationLockSolutionsFlag
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutions");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.cs b/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.cs
deleted file mode 100755
index 00ee35f..0000000
--- a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ParticipationLockSolutionsFlag : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "LockSolutions",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "LockSolutions",
-                table: "ExerciseReleaseWithUserAsParticipations");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs b/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
deleted file mode 100755
index 9b11858..0000000
--- a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
+++ /dev/null
@@ -1,1887 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181027122426_ParticipationLockSolutionsFlag2")]
-    partial class ParticipationLockSolutionsFlag2
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.cs b/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.cs
deleted file mode 100755
index f07b0b0..0000000
--- a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ParticipationLockSolutionsFlag2 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "LockSolutions",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                newName: "LockSolutionsFlag"
-                );
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "LockSolutionsFlag",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                newName: "LockSolutions"
-            );
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs b/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
deleted file mode 100755
index 120d92d..0000000
--- a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
+++ /dev/null
@@ -1,1890 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20181123151602_StoreAssessmentErrors")]
-    partial class StoreAssessmentErrors
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.cs b/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.cs
deleted file mode 100755
index 9c56463..0000000
--- a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class StoreAssessmentErrors : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "LastAssessmentErrorMessage",
-                table: "SolutionAssessment",
-                maxLength: 5000,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "LastAssessmentErrorMessage",
-                table: "SolutionAssessment");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs b/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
deleted file mode 100755
index 02fce0a..0000000
--- a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
+++ /dev/null
@@ -1,1896 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190202125311_MoreExamOptions")]
-    partial class MoreExamOptions
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.cs b/src/ClientServer/Migrations/20190202125311_MoreExamOptions.cs
deleted file mode 100755
index d2d99df..0000000
--- a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class MoreExamOptions : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "HideExerciseLeaveActions",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "HidePrintOptions",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-
-            migrationBuilder.AddColumn<bool>(
-                name: "ShowAdditionalLogButton",
-                table: "ExerciseReleases",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "HideExerciseLeaveActions",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "HidePrintOptions",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropColumn(
-                name: "ShowAdditionalLogButton",
-                table: "ExerciseReleases");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs b/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
deleted file mode 100755
index 0d7baf3..0000000
--- a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
+++ /dev/null
@@ -1,1913 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190213174200_NewSystemSettings")]
-    partial class NewSystemSettings
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.cs b/src/ClientServer/Migrations/20190213174200_NewSystemSettings.cs
deleted file mode 100755
index 08764ad..0000000
--- a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class NewSystemSettings : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "MaxNumberOfTestsWithOneRequest",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 5);
-
-            migrationBuilder.AddColumn<int>(
-                name: "MaxNumberOfTestsWithOneRequestSubmitTestServer",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 15);
-
-            migrationBuilder.AddColumn<int>(
-                name: "SubmitTestServerTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 15000);
-
-            migrationBuilder.AddColumn<string>(
-                name: "SubmitTestServerUrl",
-                table: "SystemSettings",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerStatsUrl",
-                table: "SystemSettings",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TestServerTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 7000);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerUrl",
-                table: "SystemSettings",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "MaxNumberOfTestsWithOneRequest",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "MaxNumberOfTestsWithOneRequestSubmitTestServer",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "SubmitTestServerTimeoutInMs",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "SubmitTestServerUrl",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerStatsUrl",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerTimeoutInMs",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerUrl",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs b/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
deleted file mode 100755
index b429996..0000000
--- a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
+++ /dev/null
@@ -1,1919 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190214140941_PLangHighlighting")]
-    partial class PLangHighlighting
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MarkdownHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.cs b/src/ClientServer/Migrations/20190214140941_PLangHighlighting.cs
deleted file mode 100755
index 766653f..0000000
--- a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class PLangHighlighting : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "EditorHighlightModeName",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "MarkdownHighlightModeName",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "EditorHighlightModeName",
-                table: "PLangs");
-
-            migrationBuilder.DropColumn(
-                name: "MarkdownHighlightModeName",
-                table: "PLangs");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs b/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
deleted file mode 100755
index 16e2efe..0000000
--- a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
+++ /dev/null
@@ -1,1922 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190214151239_PLangFileExtensions")]
-    partial class PLangFileExtensions
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MarkdownHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.cs b/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.cs
deleted file mode 100755
index abd0b38..0000000
--- a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class PLangFileExtensions : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "FileExtensionsWithDot",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "FileExtensionsWithDot",
-                table: "PLangs");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs b/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
deleted file mode 100755
index 4b20cd7..0000000
--- a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
+++ /dev/null
@@ -1,1919 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190214202737_RemovedUnusedPlangMarkdownMode")]
-    partial class RemovedUnusedPlangMarkdownMode
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.cs b/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.cs
deleted file mode 100755
index b508be0..0000000
--- a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class RemovedUnusedPlangMarkdownMode : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "MarkdownHighlightModeName",
-                table: "PLangs");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "MarkdownHighlightModeName",
-                table: "PLangs",
-                maxLength: 500,
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs b/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
deleted file mode 100755
index 7b37ac9..0000000
--- a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
+++ /dev/null
@@ -1,1928 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190320182329_TestAssetHashes")]
-    partial class TestAssetHashes
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.cs b/src/ClientServer/Migrations/20190320182329_TestAssetHashes.cs
deleted file mode 100755
index edb792b..0000000
--- a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class TestAssetHashes : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "Hash",
-                table: "TestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "Hash",
-                table: "CustomTestAssets",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "Hash",
-                table: "CustomProjectTestAssets",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "Hash",
-                table: "TestAssets");
-
-            migrationBuilder.DropColumn(
-                name: "Hash",
-                table: "CustomTestAssets");
-
-            migrationBuilder.DropColumn(
-                name: "Hash",
-                table: "CustomProjectTestAssets");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs b/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
deleted file mode 100755
index b53f12d..0000000
--- a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
+++ /dev/null
@@ -1,1931 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190329152856_LastEditingIpSolution")]
-    partial class LastEditingIpSolution
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.cs b/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.cs
deleted file mode 100755
index 548f14f..0000000
--- a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class LastEditingIpSolution : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "LastEditingIpAddress",
-                table: "Solutions",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "LastEditingIpAddress",
-                table: "Solutions");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs b/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
deleted file mode 100755
index 5f59360..0000000
--- a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
+++ /dev/null
@@ -1,1934 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190409160808_SystemSettingsTestServerUiUrl")]
-    partial class SystemSettingsTestServerUiUrl
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.cs b/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.cs
deleted file mode 100755
index 74a1220..0000000
--- a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class SystemSettingsTestServerUiUrl : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerConfigUiUrl",
-                table: "SystemSettings",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "TestServerConfigUiUrl",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs b/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
deleted file mode 100755
index fc2af72..0000000
--- a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
+++ /dev/null
@@ -1,1926 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190410160446_SomeDeleteActionsChanged1")]
-    partial class SomeDeleteActionsChanged1
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.cs b/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.cs
deleted file mode 100755
index 89eed66..0000000
--- a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.cs
+++ /dev/null
@@ -1,207 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class SomeDeleteActionsChanged1 : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Templates_PLangs_PLangId",
-                table: "Templates");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleases_PLangs_PLangId",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleaseWithUserAsParticipations_PLangs_LastEditedPLangId",
-                table: "ExerciseReleaseWithUserAsParticipations");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_Solutions_PLangs_PLangId",
-                table: "Solutions");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupCreatorGroupRoleId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupRoleId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_UserGroups_DefaultUserGroupId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_UserWithUserGroups_GroupRoles_GroupRoleId",
-                table: "UserWithUserGroups");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Templates_PLangs_PLangId",
-                table: "Templates",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_ExerciseReleases_PLangs_PLangId",
-                table: "ExerciseReleases",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_ExerciseReleaseWithUserAsParticipations_PLangs_LastEditedPLangId",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                column: "LastEditedPLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Solutions_PLangs_PLangId",
-                table: "Solutions",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupCreatorGroupRoleId",
-                table: "SystemSettings",
-                column: "DefaultGroupCreatorGroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupRoleId",
-                table: "SystemSettings",
-                column: "DefaultGroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_UserGroups_DefaultUserGroupId",
-                table: "SystemSettings",
-                column: "DefaultUserGroupId",
-                principalTable: "UserGroups",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserWithUserGroups_GroupRoles_GroupRoleId",
-                table: "UserWithUserGroups",
-                column: "GroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_Templates_PLangs_PLangId",
-                table: "Templates");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleases_PLangs_PLangId",
-                table: "ExerciseReleases");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleaseWithUserAsParticipations_PLangs_LastEditedPLangId",
-                table: "ExerciseReleaseWithUserAsParticipations");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_Solutions_PLangs_PLangId",
-                table: "Solutions");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupCreatorGroupRoleId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupRoleId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_SystemSettings_UserGroups_DefaultUserGroupId",
-                table: "SystemSettings");
-
-            migrationBuilder.DropForeignKey(
-                name: "FK_UserWithUserGroups_GroupRoles_GroupRoleId",
-                table: "UserWithUserGroups");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Templates_PLangs_PLangId",
-                table: "Templates",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_ExerciseReleases_PLangs_PLangId",
-                table: "ExerciseReleases",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_ExerciseReleaseWithUserAsParticipations_PLangs_LastEditedPLangId",
-                table: "ExerciseReleaseWithUserAsParticipations",
-                column: "LastEditedPLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_Solutions_PLangs_PLangId",
-                table: "Solutions",
-                column: "PLangId",
-                principalTable: "PLangs",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupCreatorGroupRoleId",
-                table: "SystemSettings",
-                column: "DefaultGroupCreatorGroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_GroupRoles_DefaultGroupRoleId",
-                table: "SystemSettings",
-                column: "DefaultGroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SystemSettings_UserGroups_DefaultUserGroupId",
-                table: "SystemSettings",
-                column: "DefaultUserGroupId",
-                principalTable: "UserGroups",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.SetNull);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserWithUserGroups_GroupRoles_GroupRoleId",
-                table: "UserWithUserGroups",
-                column: "GroupRoleId",
-                principalTable: "GroupRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs b/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
deleted file mode 100755
index 3775fe8..0000000
--- a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
+++ /dev/null
@@ -1,1928 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190419112922_JustRunTimeout")]
-    partial class JustRunTimeout
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.cs b/src/ClientServer/Migrations/20190419112922_JustRunTimeout.cs
deleted file mode 100755
index 11b5883..0000000
--- a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class JustRunTimeout : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "JustRunProgramTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "JustRunProgramTimeoutInMs",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs b/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
deleted file mode 100755
index 1cf2da8..0000000
--- a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
+++ /dev/null
@@ -1,1932 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190419153412_OtherJustRunTestLimits")]
-    partial class OtherJustRunTestLimits
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.cs b/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.cs
deleted file mode 100755
index 3dd67f3..0000000
--- a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class OtherJustRunTestLimits : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "JustRunProgramMaxDiskSpaceInKb",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-
-            migrationBuilder.AddColumn<int>(
-                name: "JustRunProgramMemoryLimitInKb",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "JustRunProgramMaxDiskSpaceInKb",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "JustRunProgramMemoryLimitInKb",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs b/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
deleted file mode 100755
index 3da6ddb..0000000
--- a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
+++ /dev/null
@@ -1,1938 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190420100505_CustomProjectTestLimits")]
-    partial class CustomProjectTestLimits
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.cs b/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.cs
deleted file mode 100755
index fcc366f..0000000
--- a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class CustomProjectTestLimits : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectTestMaxDiskSpaceInKb",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectTestMemoryLimitInKb",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectTestTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 1000);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CustomProjectTestMaxDiskSpaceInKb",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "CustomProjectTestMemoryLimitInKb",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "CustomProjectTestTimeoutInMs",
-                table: "SystemSettings");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs b/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
deleted file mode 100755
index 998a583..0000000
--- a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
+++ /dev/null
@@ -1,1988 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190420164845_TestRunningTimes")]
-    partial class TestRunningTimes
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.cs b/src/ClientServer/Migrations/20190420164845_TestRunningTimes.cs
deleted file mode 100755
index fe49ff4..0000000
--- a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class TestRunningTimes : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<string>(
-                name: "RunnerVersion",
-                table: "TestWithSingleSolutionAsTestResult",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerVersion",
-                table: "TestWithSingleSolutionAsTestResult",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForCompiling",
-                table: "TestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForUserProgram",
-                table: "TestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RunnerVersion",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerVersion",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForCompiling",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForUserProgram",
-                table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RunnerVersion",
-                table: "TestWithAfterSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerVersion",
-                table: "TestWithAfterSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForCompiling",
-                table: "TestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForUserProgram",
-                table: "TestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RunnerVersion",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerVersion",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForCompiling",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForUserProgram",
-                table: "CustomTestWithAfterSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RunnerVersion",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "TestServerVersion",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForCompiling",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                nullable: true);
-
-            migrationBuilder.AddColumn<int>(
-                name: "TimeForUserProgram",
-                table: "CustomProjectTestWithSolutionAsTestResults",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "RunnerVersion",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerVersion",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForCompiling",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForUserProgram",
-                table: "TestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "RunnerVersion",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerVersion",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForCompiling",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForUserProgram",
-                table: "CustomTestWithSingleSolutionAsTestResult");
-
-            migrationBuilder.DropColumn(
-                name: "RunnerVersion",
-                table: "TestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerVersion",
-                table: "TestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForCompiling",
-                table: "TestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForUserProgram",
-                table: "TestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "RunnerVersion",
-                table: "CustomTestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerVersion",
-                table: "CustomTestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForCompiling",
-                table: "CustomTestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForUserProgram",
-                table: "CustomTestWithAfterSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "RunnerVersion",
-                table: "CustomProjectTestWithSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TestServerVersion",
-                table: "CustomProjectTestWithSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForCompiling",
-                table: "CustomProjectTestWithSolutionAsTestResults");
-
-            migrationBuilder.DropColumn(
-                name: "TimeForUserProgram",
-                table: "CustomProjectTestWithSolutionAsTestResults");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs b/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
deleted file mode 100755
index a38ef7f..0000000
--- a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
+++ /dev/null
@@ -1,2016 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190428191918_MoreTestLimitsAndCompilerTimeout")]
-    partial class MoreTestLimitsAndCompilerTimeout
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs b/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
deleted file mode 100755
index d45019e..0000000
--- a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
+++ /dev/null
@@ -1,2018 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190430202149_MaxManualPoints")]
-    partial class MaxManualPoints
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.cs b/src/ClientServer/Migrations/20190430202149_MaxManualPoints.cs
deleted file mode 100755
index 0af8c2c..0000000
--- a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class MaxManualPoints : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<int>(
-                name: "MaxManualPoint",
-                table: "ExerciseReleases",
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "MaxManualPoint",
-                table: "ExerciseReleases");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs b/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
deleted file mode 100755
index 71248de..0000000
--- a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
+++ /dev/null
@@ -1,2020 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190501142551_HiddenTemplateFiles")]
-    partial class HiddenTemplateFiles
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentHiddenForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.cs b/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.cs
deleted file mode 100755
index c61f310..0000000
--- a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class HiddenTemplateFiles : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "IsContentHiddenForUser",
-                table: "TemplateFiles",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "IsContentHiddenForUser",
-                table: "TemplateFiles");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs b/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
deleted file mode 100755
index 05379f4..0000000
--- a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
+++ /dev/null
@@ -1,2020 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190501143221_RenameTemplateVisibility")]
-    partial class RenameTemplateVisibility
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.cs b/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.cs
deleted file mode 100755
index 0209b04..0000000
--- a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class RenameTemplateVisibility : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "IsContentHiddenForUser",
-                table: "TemplateFiles");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "IsContentVisibleForUser",
-                table: "TemplateFiles",
-                nullable: false,
-                defaultValue: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "IsContentVisibleForUser",
-                table: "TemplateFiles");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "IsContentHiddenForUser",
-                table: "TemplateFiles",
-                nullable: false,
-                defaultValue: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs b/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
deleted file mode 100755
index 29933ce..0000000
--- a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
+++ /dev/null
@@ -1,2020 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190503160702_ReleasePLangRequiredNow")]
-    partial class ReleasePLangRequiredNow
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.cs b/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.cs
deleted file mode 100755
index f333185..0000000
--- a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ReleasePLangRequiredNow : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "PLangId",
-                table: "ExerciseReleases",
-                nullable: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<int>(
-                name: "PLangId",
-                table: "ExerciseReleases",
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs b/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
deleted file mode 100755
index 934dbc3..0000000
--- a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
+++ /dev/null
@@ -1,2022 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190505105057_ExerciseExamLock")]
-    partial class ExerciseExamLock
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("ShouldShowSubmitResult");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.cs b/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.cs
deleted file mode 100755
index d39b8ea..0000000
--- a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ExerciseExamLock : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "IsPermanentlyLocked",
-                table: "Exercises",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "IsPermanentlyLocked",
-                table: "Exercises");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs b/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
deleted file mode 100755
index 33f06c2..0000000
--- a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
+++ /dev/null
@@ -1,2022 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190505122337_ExerciseLockedGroupRolePermission")]
-    partial class ExerciseLockedGroupRolePermission
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCopyExercises");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.cs b/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.cs
deleted file mode 100755
index f9f06ab..0000000
--- a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ExerciseLockedGroupRolePermission : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "ShouldShowSubmitResult",
-                table: "Exercises");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "CanLockExercisesPermanently",
-                table: "GroupRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanLockExercisesPermanently",
-                table: "GroupRolePermissions");
-
-            migrationBuilder.AddColumn<bool>(
-                name: "ShouldShowSubmitResult",
-                table: "Exercises",
-                nullable: false,
-                defaultValue: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs b/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
deleted file mode 100755
index 84e51de..0000000
--- a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
+++ /dev/null
@@ -1,2020 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190508134143_RemoveCopyPermission")]
-    partial class RemoveCopyPermission
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.cs b/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.cs
deleted file mode 100755
index fa30e62..0000000
--- a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class RemoveCopyPermission : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CanCopyExercises",
-                table: "GroupRolePermissions");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AddColumn<bool>(
-                name: "CanCopyExercises",
-                table: "GroupRolePermissions",
-                nullable: false,
-                defaultValue: false);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs b/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
deleted file mode 100755
index 44228ed..0000000
--- a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
+++ /dev/null
@@ -1,2076 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190530135332_ExerciseMarkdownFiles")]
-    partial class ExerciseMarkdownFiles
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("ExerciseDescriptionId");
-
-                    b.Property<int>("FileReferenceMarkdownAssetId");
-
-                    b.HasKey("ExerciseDescriptionId", "FileReferenceMarkdownAssetId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.HasIndex("FileReferenceMarkdownAssetId");
-
-                    b.ToTable("ExerciseDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceMarkdownAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceMarkdownAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceMarkdownAsset", "FileReferenceMarkdownAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceMarkdownAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.cs b/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.cs
deleted file mode 100755
index 18bd238..0000000
--- a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ExerciseMarkdownFiles : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "FileReferenceMarkdownAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    Hash = table.Column<string>(maxLength: 500, nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true),
-                    OriginalName = table.Column<string>(maxLength: 500, nullable: true),
-                    RelativePath = table.Column<string>(maxLength: 5000, nullable: true),
-                    SizeInBytes = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_FileReferenceMarkdownAssets", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "ExerciseDescriptionWithFileAsAssetReferences",
-                columns: table => new
-                {
-                    ExerciseDescriptionId = table.Column<int>(nullable: false),
-                    FileReferenceMarkdownAssetId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ExerciseDescriptionWithFileAsAssetReferences", x => new { x.ExerciseDescriptionId, x.FileReferenceMarkdownAssetId });
-                    table.ForeignKey(
-                        name: "FK_ExerciseDescriptionWithFileAsAssetReferences_ExerciseDescriptions_ExerciseDescriptionId",
-                        column: x => x.ExerciseDescriptionId,
-                        principalTable: "ExerciseDescriptions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_ExerciseDescriptionWithFileAsAssetReferences_FileReferenceMarkdownAssets_FileReferenceMarkdownAssetId",
-                        column: x => x.FileReferenceMarkdownAssetId,
-                        principalTable: "FileReferenceMarkdownAssets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ExerciseDescriptionWithFileAsAssetReferences_ExerciseDescriptionId",
-                table: "ExerciseDescriptionWithFileAsAssetReferences",
-                column: "ExerciseDescriptionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ExerciseDescriptionWithFileAsAssetReferences_FileReferenceMarkdownAssetId",
-                table: "ExerciseDescriptionWithFileAsAssetReferences",
-                column: "FileReferenceMarkdownAssetId");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "ExerciseDescriptionWithFileAsAssetReferences");
-
-            migrationBuilder.DropTable(
-                name: "FileReferenceMarkdownAssets");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.cs b/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.cs
deleted file mode 100755
index c5786ca..0000000
--- a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class ExerciseTestAssetFiles : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "FileReferenceTestAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    Hash = table.Column<string>(maxLength: 500, nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true),
-                    OriginalName = table.Column<string>(maxLength: 500, nullable: true),
-                    RelativePath = table.Column<string>(maxLength: 5000, nullable: true),
-                    SizeInBytes = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_FileReferenceTestAssets", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "TestWithFileAsAssetReferences",
-                columns: table => new
-                {
-                    TestId = table.Column<int>(nullable: false),
-                    FileReferenceTestAssetId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_TestWithFileAsAssetReferences", x => new { x.TestId, x.FileReferenceTestAssetId });
-                    table.ForeignKey(
-                        name: "FK_TestWithFileAsAssetReferences_FileReferenceTestAssets_FileReferenceTestAssetId",
-                        column: x => x.FileReferenceTestAssetId,
-                        principalTable: "FileReferenceTestAssets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_TestWithFileAsAssetReferences_Tests_TestId",
-                        column: x => x.TestId,
-                        principalTable: "Tests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithFileAsAssetReferences_FileReferenceTestAssetId",
-                table: "TestWithFileAsAssetReferences",
-                column: "FileReferenceTestAssetId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestWithFileAsAssetReferences_TestId",
-                table: "TestWithFileAsAssetReferences",
-                column: "TestId");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "TestWithFileAsAssetReferences");
-
-            migrationBuilder.DropTable(
-                name: "FileReferenceTestAssets");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs b/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
deleted file mode 100755
index 33ce473..0000000
--- a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
+++ /dev/null
@@ -1,2244 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190602180648_CustomUserFiles")]
-    partial class CustomUserFiles
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectDescriptionId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectDescriptionId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("ExerciseDescriptionId");
-
-                    b.Property<int>("FileReferenceMarkdownAssetId");
-
-                    b.HasKey("ExerciseDescriptionId", "FileReferenceMarkdownAssetId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.HasIndex("FileReferenceMarkdownAssetId");
-
-                    b.ToTable("ExerciseDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("FileReferenceTestAssetId");
-
-                    b.HasKey("TestId", "FileReferenceTestAssetId");
-
-                    b.HasIndex("FileReferenceTestAssetId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceMarkdownAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceMarkdownAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceUserFileAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceUserFileAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectDescriptionWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceMarkdownAsset", "FileReferenceMarkdownAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceMarkdownAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Files.FileReferenceTestAsset", "FileReferenceTestAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceTestAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.cs b/src/ClientServer/Migrations/20190602180648_CustomUserFiles.cs
deleted file mode 100755
index 18199da..0000000
--- a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class CustomUserFiles : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "FileReferenceUserFileAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    Hash = table.Column<string>(maxLength: 500, nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true),
-                    OriginalName = table.Column<string>(maxLength: 500, nullable: true),
-                    RelativePath = table.Column<string>(maxLength: 5000, nullable: true),
-                    SizeInBytes = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_FileReferenceUserFileAssets", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectDescriptionWithFileAsAssetReferences",
-                columns: table => new
-                {
-                    CustomProjectDescriptionId = table.Column<int>(nullable: false),
-                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectDescriptionWithFileAsAssetReferences", x => new { x.CustomProjectDescriptionId, x.FileReferenceUserFileAssetId });
-                    table.ForeignKey(
-                        name: "FK_CustomProjectDescriptionWithFileAsAssetReferences_CustomProjectDescriptions_CustomProjectDescriptionId",
-                        column: x => x.CustomProjectDescriptionId,
-                        principalTable: "CustomProjectDescriptions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectDescriptionWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
-                        column: x => x.FileReferenceUserFileAssetId,
-                        principalTable: "FileReferenceUserFileAssets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomProjectTestWithFileAsAssetReferences",
-                columns: table => new
-                {
-                    CustomProjectTestId = table.Column<int>(nullable: false),
-                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomProjectTestWithFileAsAssetReferences", x => new { x.CustomProjectTestId, x.FileReferenceUserFileAssetId });
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTestWithFileAsAssetReferences_CustomProjectTests_CustomProjectTestId",
-                        column: x => x.CustomProjectTestId,
-                        principalTable: "CustomProjectTests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomProjectTestWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
-                        column: x => x.FileReferenceUserFileAssetId,
-                        principalTable: "FileReferenceUserFileAssets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomTestWithFileAsAssetReferences",
-                columns: table => new
-                {
-                    CustomTestId = table.Column<int>(nullable: false),
-                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomTestWithFileAsAssetReferences", x => new { x.CustomTestId, x.FileReferenceUserFileAssetId });
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithFileAsAssetReferences_CustomTest_CustomTestId",
-                        column: x => x.CustomTestId,
-                        principalTable: "CustomTest",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_CustomTestWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
-                        column: x => x.FileReferenceUserFileAssetId,
-                        principalTable: "FileReferenceUserFileAssets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectDescriptionWithFileAsAssetReferences_CustomProjectDescriptionId",
-                table: "CustomProjectDescriptionWithFileAsAssetReferences",
-                column: "CustomProjectDescriptionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectDescriptionWithFileAsAssetReferences_FileReferenceUserFileAssetId",
-                table: "CustomProjectDescriptionWithFileAsAssetReferences",
-                column: "FileReferenceUserFileAssetId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestWithFileAsAssetReferences_CustomProjectTestId",
-                table: "CustomProjectTestWithFileAsAssetReferences",
-                column: "CustomProjectTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestWithFileAsAssetReferences_FileReferenceUserFileAssetId",
-                table: "CustomProjectTestWithFileAsAssetReferences",
-                column: "FileReferenceUserFileAssetId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithFileAsAssetReferences_CustomTestId",
-                table: "CustomTestWithFileAsAssetReferences",
-                column: "CustomTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithFileAsAssetReferences_FileReferenceUserFileAssetId",
-                table: "CustomTestWithFileAsAssetReferences",
-                column: "FileReferenceUserFileAssetId");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "CustomProjectDescriptionWithFileAsAssetReferences");
-
-            migrationBuilder.DropTable(
-                name: "CustomProjectTestWithFileAsAssetReferences");
-
-            migrationBuilder.DropTable(
-                name: "CustomTestWithFileAsAssetReferences");
-
-            migrationBuilder.DropTable(
-                name: "FileReferenceUserFileAssets");
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
deleted file mode 100755
index 61149c8..0000000
--- a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
+++ /dev/null
@@ -1,2241 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190606164356_RemoveAssetPathsAddedCompilerOptions")]
-    partial class RemoveAssetPathsAddedCompilerOptions
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectDescriptionId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectDescriptionId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("ExerciseDescriptionId");
-
-                    b.Property<int>("FileReferenceMarkdownAssetId");
-
-                    b.HasKey("ExerciseDescriptionId", "FileReferenceMarkdownAssetId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.HasIndex("FileReferenceMarkdownAssetId");
-
-                    b.ToTable("ExerciseDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("FileReferenceTestAssetId");
-
-                    b.HasKey("TestId", "FileReferenceTestAssetId");
-
-                    b.HasIndex("FileReferenceTestAssetId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceMarkdownAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceMarkdownAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceUserFileAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceUserFileAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanReleaseExercises");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectDescriptionWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceMarkdownAsset", "FileReferenceMarkdownAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceMarkdownAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Files.FileReferenceTestAsset", "FileReferenceTestAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceTestAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs
deleted file mode 100755
index 27c7a57..0000000
--- a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class RemoveAssetPathsAddedCompilerOptions : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "RelativePath",
-                table: "FileReferenceUserFileAssets");
-
-            migrationBuilder.DropColumn(
-                name: "RelativePath",
-                table: "FileReferenceTestAssets");
-
-            migrationBuilder.DropColumn(
-                name: "RelativePath",
-                table: "FileReferenceMarkdownAssets");
-
-            migrationBuilder.AddColumn<string>(
-                name: "CompilerOptions",
-                table: "TestCaseSettingses",
-                maxLength: 500,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "CompilerOptions",
-                table: "DefaultCustomTestSettings",
-                maxLength: 500,
-                nullable: true);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropColumn(
-                name: "CompilerOptions",
-                table: "TestCaseSettingses");
-
-            migrationBuilder.DropColumn(
-                name: "CompilerOptions",
-                table: "DefaultCustomTestSettings");
-
-            migrationBuilder.AddColumn<string>(
-                name: "RelativePath",
-                table: "FileReferenceUserFileAssets",
-                maxLength: 5000,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RelativePath",
-                table: "FileReferenceTestAssets",
-                maxLength: 5000,
-                nullable: true);
-
-            migrationBuilder.AddColumn<string>(
-                name: "RelativePath",
-                table: "FileReferenceMarkdownAssets",
-                maxLength: 5000,
-                nullable: true);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190612151016_Renames.Designer.cs b/src/ClientServer/Migrations/20190612151016_Renames.Designer.cs
deleted file mode 100755
index 999b424..0000000
--- a/src/ClientServer/Migrations/20190612151016_Renames.Designer.cs
+++ /dev/null
@@ -1,2241 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using ClientServer.Db;
-using ClientServer.Models.Exercises.Release;
-
-namespace ClientServer.Migrations
-{
-    [DbContext(typeof(YapexDbContext))]
-    [Migration("20190612151016_Renames")]
-    partial class Renames
-    {
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-            modelBuilder
-                .HasAnnotation("ProductVersion", "1.0.3");
-
-            modelBuilder.Entity("ClientServer.Models.AwaitDummy", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AwaitDummies");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("LastEditorPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("CustomProjects");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId")
-                        .IsUnique();
-
-                    b.ToTable("CustomProjectDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectDescriptionId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectDescriptionId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("CustomProjectSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectSolutionId")
-                        .IsRequired();
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.ToTable("CustomProjectSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("CustomProjectId");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("CustomProjectTests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomProjectTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomProjectTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomProjectSolutionId");
-
-                    b.Property<int>("CustomProjectTestId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomProjectSolutionId", "CustomProjectTestId");
-
-                    b.HasIndex("CustomProjectSolutionId");
-
-                    b.HasIndex("CustomProjectTestId");
-
-                    b.ToTable("CustomProjectTestWithSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .IsUnique();
-
-                    b.ToTable("AfterSolutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.ToTable("AfterSolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("AfterSolutionId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "AfterSolutionId");
-
-                    b.HasIndex("AfterSolutionId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithAfterSolutionAsTestResults");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<int>("PLangId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("Templates");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("FileReferenceUserFileAssetId");
-
-                    b.HasKey("CustomTestId", "FileReferenceUserFileAssetId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("FileReferenceUserFileAssetId");
-
-                    b.ToTable("CustomTestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanUserCreateCustomTests");
-
-                    b.Property<bool>("CanUserCreateFiles");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsOnlyVisibleToOwner");
-
-                    b.Property<bool>("IsPermanentlyLocked");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Exercises");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("ExerciseDescriptions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("ExerciseDescriptionId");
-
-                    b.Property<int>("FileReferenceMarkdownAssetId");
-
-                    b.HasKey("ExerciseDescriptionId", "FileReferenceMarkdownAssetId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.HasIndex("FileReferenceMarkdownAssetId");
-
-                    b.ToTable("ExerciseDescriptionWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<int?>("ExerciseId1");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.HasIndex("ExerciseId1");
-
-                    b.ToTable("MetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime?>("AutomaticEndAt");
-
-                    b.Property<DateTime?>("AutomaticStartAt");
-
-                    b.Property<int>("AvailableWorkingTimeInMinutes");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<string>("GeneratedCode")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("HadAutomaticAssessmentErrors");
-
-                    b.Property<bool>("HasAutomaticAssessmentFinished");
-
-                    b.Property<bool>("HasAutomaticAssessmentStarted");
-
-                    b.Property<bool>("HasLimitedWorkingTime");
-
-                    b.Property<bool>("HideExerciseLeaveActions");
-
-                    b.Property<bool>("HideInOverviews");
-
-                    b.Property<bool>("HidePrintOptions");
-
-                    b.Property<bool>("HideSiteHeaderBar");
-
-                    b.Property<bool>("IsReleased");
-
-                    b.Property<bool>("IsVisibleToAllAfterRelease");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MaxManualPoint");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int>("ReleaseDurationType");
-
-                    b.Property<int>("ReleaseStartType");
-
-                    b.Property<DateTime?>("ReleasedAt");
-
-                    b.Property<bool>("RunAlsoNormalTests");
-
-                    b.Property<bool>("ShouldAutomaticAssessSubmissions");
-
-                    b.Property<bool>("ShouldClearClipboard");
-
-                    b.Property<bool>("ShowAdditionalLogButton");
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("GeneratedCode")
-                        .HasName("Unique_GeneratedCode");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("PLangId");
-
-                    b.ToTable("ExerciseReleases");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("CustomTestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("CustomTestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("CustomTestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("LastEditedPLangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("LockSolutionsFlag");
-
-                    b.Property<bool>("ShouldNotCount");
-
-                    b.HasKey("UserId", "ExerciseReleaseId");
-
-                    b.HasIndex("ExerciseReleaseId");
-
-                    b.HasIndex("LastEditedPLangId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ExerciseReleaseWithUserAsParticipations");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<int>("PLangId");
-
-                    b.Property<int?>("AssessmentId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int?>("MainFileId");
-
-                    b.Property<string>("Note")
-                        .HasMaxLength(1000);
-
-                    b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
-
-                    b.HasIndex("AssessmentId")
-                        .IsUnique();
-
-                    b.HasIndex("MainFileId")
-                        .IsUnique();
-
-                    b.HasIndex("PLangId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("Solutions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionAssessment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
-
-                    b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
-
-                    b.Property<int?>("ManualPoints");
-
-                    b.Property<int>("MaxNormalTestPoints");
-
-                    b.Property<int>("MaxSubmitTestPoints");
-
-                    b.Property<int?>("NormalTestPoints");
-
-                    b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
-
-                    b.Property<int?>("SubmitTestPoints");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SolutionAssessment");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsDisplayed");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int?>("TemplateFileId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TemplateFileId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("SolutionFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("SolutionUserId");
-
-                    b.Property<int>("SolutionExerciseReleaseId");
-
-                    b.Property<int>("SolutionPLangId");
-
-                    b.Property<int?>("CompileTimeoutInMsUsed");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<bool?>("HasCompiled");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool?>("Passed");
-
-                    b.Property<int?>("ProgramExitCode");
-
-                    b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
-
-                    b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestResultCode");
-
-                    b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TimeForCompiling");
-
-                    b.Property<int?>("TimeForUserProgram");
-
-                    b.Property<int?>("TimeoutInMsUsed");
-
-                    b.HasKey("TestId", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.HasIndex("TestId");
-
-                    b.HasIndex("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId");
-
-                    b.ToTable("TestWithSingleSolutionAsTestResult");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tag", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Description")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DisplayName")
-                        .HasName("Unique_Tag");
-
-                    b.ToTable("Tags");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.Property<int>("TagId");
-
-                    b.Property<int>("MetaDataId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("TagId", "MetaDataId");
-
-                    b.HasIndex("MetaDataId");
-
-                    b.HasIndex("TagId");
-
-                    b.ToTable("TagWithMetaDatas");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int?>("CodeTemplateId")
-                        .IsRequired();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(10000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsContentVisibleForUser");
-
-                    b.Property<bool>("IsEditableByUser");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeTemplateId");
-
-                    b.ToTable("TemplateFiles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseReleaseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestTypeId");
-
-                    b.HasIndex("UserId", "ExerciseReleaseId");
-
-                    b.ToTable("CustomTest");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId")
-                        .IsUnique();
-
-                    b.ToTable("DefaultCustomTestSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("Content")
-                        .HasMaxLength(5000);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("DisplayIndex");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("ExerciseId");
-
-                    b.Property<bool>("IsSubmitTest");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("TestSettingsId");
-
-                    b.Property<int>("TestTypeId");
-
-                    b.Property<int>("Weight");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ExerciseId");
-
-                    b.HasIndex("TestSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("TestTypeId");
-
-                    b.ToTable("Tests");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CompileTimeoutInMs");
-
-                    b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxDiskSpaceInKb");
-
-                    b.Property<int>("MemoryLimitInKb");
-
-                    b.Property<int>("TimeoutInMs");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestCaseSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestType", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("TestTypes");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.Property<int>("TestId");
-
-                    b.Property<int>("FileReferenceTestAssetId");
-
-                    b.HasKey("TestId", "FileReferenceTestAssetId");
-
-                    b.HasIndex("FileReferenceTestAssetId");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestWithFileAsAssetReferences");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceMarkdownAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceMarkdownAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceTestAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceUserFileAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<long>("SizeInBytes");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("FileReferenceUserFileAssets");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Lang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Language")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Langs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.PLang", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("InternalName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("PLangs");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("ExpirationDateTime");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
-
-                    b.HasKey("UserId");
-
-                    b.HasIndex("UserAuthToken")
-                        .IsUnique();
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("AuthTokens");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.Property<int>("ExternalId")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("NeedToRefreshData");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.Property<int>("UserId");
-
-                    b.HasKey("ExternalId");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_ExternalToken");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("ExternalUsers");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("GroupRolePermissionId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GroupRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("GroupRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanAddUserToGroup");
-
-                    b.Property<bool>("CanAssessExercises");
-
-                    b.Property<bool>("CanChangeExercises");
-
-                    b.Property<bool>("CanChangeGroupData");
-
-                    b.Property<bool>("CanChangeOtherMembersRole");
-
-                    b.Property<bool>("CanCreateExercises");
-
-                    b.Property<bool>("CanDeleteExercises");
-
-                    b.Property<bool>("CanLockExercisesPermanently");
-
-                    b.Property<bool>("CanManageExerciseReleases");
-
-                    b.Property<bool>("CanRemoveMemberFromGroup");
-
-                    b.Property<bool>("CanSeeExercisesFromOthersInGroup");
-
-                    b.Property<bool>("CanSeeOtherMembers");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("GroupRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.CodeEditorSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("FontSize");
-
-                    b.Property<bool>("HighlightCurrentLine");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<bool>("ShowInvisibles");
-
-                    b.Property<bool>("ShowLineIndentions");
-
-                    b.Property<bool>("ShowLineNumbers");
-
-                    b.Property<int>("TabSize");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("UseWrapping");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("CodeEditorSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<int>("CodeEditorSettingsId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("LangId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Theme")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("UserId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CodeEditorSettingsId")
-                        .IsUnique();
-
-                    b.HasIndex("LangId");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserSettingses");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("SystemRolePermissionId");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("SystemRolePermissionId")
-                        .IsUnique();
-
-                    b.ToTable("SystemRoles");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRolePermission", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<bool>("CanChangeOtherUsersSystemRole");
-
-                    b.Property<bool>("CanChangeRoles");
-
-                    b.Property<bool>("CanChangeSystemSettings");
-
-                    b.Property<bool>("CanChangeUserData");
-
-                    b.Property<bool>("CanCreateGroups");
-
-                    b.Property<bool>("CanCreateRoles");
-
-                    b.Property<bool>("CanDeleteActivatedUsers");
-
-                    b.Property<bool>("CanDeleteGroups");
-
-                    b.Property<bool>("CanDeleteRoles");
-
-                    b.Property<bool>("CanManageNewUsers");
-
-                    b.Property<bool>("CanManageTags");
-
-                    b.Property<bool>("CanViewDashboard");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("SystemRolePermissions");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
-
-                    b.Property<int>("CustomProjectTestCompileTimeoutInMs");
-
-                    b.Property<int>("CustomProjectTestMaxDiskSpaceInKb");
-
-                    b.Property<int>("CustomProjectTestMemoryLimitInKb");
-
-                    b.Property<int>("CustomProjectTestTimeoutInMs");
-
-                    b.Property<int>("DefaultGroupCreatorGroupRoleId");
-
-                    b.Property<int>("DefaultGroupRoleId");
-
-                    b.Property<int>("DefaultUserGroupId");
-
-                    b.Property<int>("JustRunProgramCompileTimeoutInMs");
-
-                    b.Property<int>("JustRunProgramMaxDiskSpaceInKb");
-
-                    b.Property<int>("JustRunProgramMemoryLimitInKb");
-
-                    b.Property<int>("JustRunProgramTimeoutInMs");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<int>("MaxCustomProjectsPerUser");
-
-                    b.Property<int>("MaxCustomTestsPerParticipation");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequest");
-
-                    b.Property<int>("MaxNumberOfTestsWithOneRequestSubmitTestServer");
-
-                    b.Property<int>("SubmitTestServerTimeoutInMs");
-
-                    b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<int>("TestServerTimeoutInMs");
-
-                    b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("DefaultGroupCreatorGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultGroupRoleId")
-                        .IsUnique();
-
-                    b.HasIndex("DefaultUserGroupId")
-                        .IsUnique();
-
-                    b.ToTable("SystemSettings");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("FirstName")
-                        .HasMaxLength(500);
-
-                    b.Property<bool>("IsActivated");
-
-                    b.Property<DateTime>("LastLoginAt");
-
-                    b.Property<string>("LastName")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("Password")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("SystemRoleId");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasAlternateKey("Token")
-                        .HasName("Unique_Token");
-
-                    b.HasIndex("SystemRoleId");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserGroup", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.Property<int>("UserId");
-
-                    b.Property<int>("UserGroupId");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int>("GroupRoleId");
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.HasKey("UserId", "UserGroupId");
-
-                    b.HasIndex("GroupRoleId");
-
-                    b.HasIndex("UserGroupId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserWithUserGroups");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProject", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("CustomProjects")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectDescriptionWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Solutions")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
-                        .WithMany("Tests")
-                        .HasForeignKey("CustomProjectId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.CustomProjects.CustomProjectTest", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomProjectTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectSolution", "CustomProjectSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
-                        .WithMany("TestResults")
-                        .HasForeignKey("CustomProjectTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithOne("AfterSolution")
-                        .HasForeignKey("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.AfterSolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany()
-                        .HasForeignKey("TemplateFileId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.CustomTestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.AfterSolutions.TestWithAfterSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.AfterSolutions.AfterSolution", "AfterSolution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("AfterSolutionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AfterTestResults")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("CodeTemplates")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.CodeTemplate", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
-                        .WithMany("CustomTestWithFileAsAssetReferences")
-                        .HasForeignKey("FileReferenceUserFileAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("Exercises")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescription", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("Description")
-                        .HasForeignKey("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.ExerciseDescriptionWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription", "ExerciseDescription")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Files.FileReferenceMarkdownAsset", "FileReferenceMarkdownAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceMarkdownAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
-                        .WithOne("MetaData")
-                        .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Releases")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.CustomTestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("CustomTestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Release.ExerciseRelease", "ExerciseRelease")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.PLang", "LastEditedPLang")
-                        .WithMany()
-                        .HasForeignKey("LastEditedPLangId");
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("ExerciseReleaseWithUserAsParticipations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.Solution", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionAssessment", "Assessment")
-                        .WithOne("Solution")
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "AssessmentId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.SolutionFile", "MainFile")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Solution.Solution", "MainFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.PLang", "PLang")
-                        .WithMany()
-                        .HasForeignKey("PLangId");
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation", "ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("Solutions")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.SolutionFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.TemplateFile", "TemplateFile")
-                        .WithMany("SolutionParts")
-                        .HasForeignKey("TemplateFileId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("SolutionFiles")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Solution.TestWithSingleSolutionAsTestResult", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("TestResultsNew")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.Solution", "Solution")
-                        .WithMany("TestResults")
-                        .HasForeignKey("SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TagWithMetaData", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.MetaData", "MetaData")
-                        .WithMany("TagWithMetaDatas")
-                        .HasForeignKey("MetaDataId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tag", "Tag")
-                        .WithMany()
-                        .HasForeignKey("TagId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TemplateFile", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.CodeTemplate")
-                        .WithMany("TemplateFiles")
-                        .HasForeignKey("CodeTemplateId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTest", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Solution.ExerciseReleaseWithUserAsParticipation")
-                        .WithMany("CustomTests")
-                        .HasForeignKey("UserId", "ExerciseReleaseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithOne("DefaultCustomTestSettings")
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", "ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.Test", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany("Tests")
-                        .HasForeignKey("ExerciseId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestSettings", "TestSettings")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Exercises.Tests.Test", "TestSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.TestType", "TestType")
-                        .WithMany()
-                        .HasForeignKey("TestTypeId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
-                {
-                    b.HasOne("ClientServer.Models.Files.FileReferenceTestAsset", "FileReferenceTestAsset")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("FileReferenceTestAssetId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test", "Test")
-                        .WithMany("AssetReferences")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.AuthToken", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.AuthToken", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.ExternalUser", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("ExternalUser")
-                        .HasForeignKey("ClientServer.Models.Users.ExternalUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.GroupRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRolePermission", "GroupRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.GroupRole", "GroupRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.Settings.UserSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.Settings.CodeEditorSetting", "CodeEditorSetting")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "CodeEditorSettingsId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Lang", "Lang")
-                        .WithMany()
-                        .HasForeignKey("LangId")
-                        .OnDelete(DeleteBehavior.SetNull);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithOne("UserSettings")
-                        .HasForeignKey("ClientServer.Models.Users.Settings.UserSetting", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemRole", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRolePermission", "SystemRolePermission")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemRole", "SystemRolePermissionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.SystemSetting", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupCreatorGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupCreatorGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "DefaultGroupRole")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultGroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "DefaultUserGroup")
-                        .WithOne()
-                        .HasForeignKey("ClientServer.Models.Users.SystemSetting", "DefaultUserGroupId");
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.User", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.SystemRole", "SystemRole")
-                        .WithMany()
-                        .HasForeignKey("SystemRoleId")
-                        .OnDelete(DeleteBehavior.SetNull);
-                });
-
-            modelBuilder.Entity("ClientServer.Models.Users.UserWithUserGroup", b =>
-                {
-                    b.HasOne("ClientServer.Models.Users.GroupRole", "GroupRole")
-                        .WithMany("UserUserGroups")
-                        .HasForeignKey("GroupRoleId");
-
-                    b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserGroupId")
-                        .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Users.User", "User")
-                        .WithMany("UserWithUserGroups")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190612151016_Renames.cs b/src/ClientServer/Migrations/20190612151016_Renames.cs
deleted file mode 100755
index 670255e..0000000
--- a/src/ClientServer/Migrations/20190612151016_Renames.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class Renames : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "CanReleaseExercises",
-                table: "GroupRolePermissions",
-                newName: "CanManageExerciseReleases"
-            );
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.RenameColumn(
-                name: "CanManageExerciseReleases",
-                table: "GroupRolePermissions",
-                newName: "CanReleaseExercises"
-            );
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.cs b/src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.cs
deleted file mode 100755
index 81942cd..0000000
--- a/src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace ClientServer.Migrations
-{
-    public partial class RemoveOldDbAssets : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(
-                name: "FK_CustomProjectTestAssets_CustomProjectTests_CustomProjectTestId",
-                table: "CustomProjectTestAssets");
-
-            migrationBuilder.DropIndex(
-                name: "IX_CustomProjectTestAssets_CustomProjectTestId",
-                table: "CustomProjectTestAssets");
-
-            migrationBuilder.DropColumn(
-                name: "CustomProjectTestId",
-                table: "CustomProjectTestAssets");
-
-            migrationBuilder.DropTable(
-                name: "Assets");
-
-            migrationBuilder.DropTable(
-                name: "CustomTestAssets");
-
-            migrationBuilder.DropTable(
-                name: "TestAssets");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "Assets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    AssetUrl = table.Column<string>(maxLength: 500, nullable: true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomProjectDescriptionId = table.Column<int>(nullable: true),
-                    DisplayName = table.Column<string>(maxLength: 500, nullable: true),
-                    ExerciseDescriptionId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Assets", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Assets_CustomProjectDescriptions_CustomProjectDescriptionId",
-                        column: x => x.CustomProjectDescriptionId,
-                        principalTable: "CustomProjectDescriptions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_Assets_ExerciseDescriptions_ExerciseDescriptionId",
-                        column: x => x.ExerciseDescriptionId,
-                        principalTable: "ExerciseDescriptions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomTestAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    CustomTestId = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(maxLength: 500, nullable: true),
-                    Hash = table.Column<string>(maxLength: 500, nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_CustomTestAssets", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_CustomTestAssets_CustomTest_CustomTestId",
-                        column: x => x.CustomTestId,
-                        principalTable: "CustomTest",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "TestAssets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(maxLength: 500, nullable: true),
-                    Hash = table.Column<string>(maxLength: 500, nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(maxLength: 500, nullable: true),
-                    TestId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_TestAssets", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_TestAssets_Tests_TestId",
-                        column: x => x.TestId,
-                        principalTable: "Tests",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectTestId",
-                table: "CustomProjectTestAssets",
-                nullable: false,
-                defaultValue: 0);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomProjectTestAssets_CustomProjectTestId",
-                table: "CustomProjectTestAssets",
-                column: "CustomProjectTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Assets_CustomProjectDescriptionId",
-                table: "Assets",
-                column: "CustomProjectDescriptionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Assets_ExerciseDescriptionId",
-                table: "Assets",
-                column: "ExerciseDescriptionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestAssets_CustomTestId",
-                table: "CustomTestAssets",
-                column: "CustomTestId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_TestAssets_TestId",
-                table: "TestAssets",
-                column: "TestId");
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_CustomProjectTestAssets_CustomProjectTests_CustomProjectTestId",
-                table: "CustomProjectTestAssets",
-                column: "CustomProjectTestId",
-                principalTable: "CustomProjectTests",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-    }
-}
diff --git a/src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.Designer.cs b/src/ClientServer/Migrations/20190729124536_init.Designer.cs
similarity index 94%
rename from src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.Designer.cs
rename to src/ClientServer/Migrations/20190729124536_init.Designer.cs
index 0da3864..c6c64f5 100755
--- a/src/ClientServer/Migrations/20190728133647_RemoveOldDbAssets.Designer.cs
+++ b/src/ClientServer/Migrations/20190729124536_init.Designer.cs
@@ -9,8 +9,8 @@ using ClientServer.Models.Exercises.Release;
 namespace ClientServer.Migrations
 {
     [DbContext(typeof(YapexDbContext))]
-    [Migration("20190728133647_RemoveOldDbAssets")]
-    partial class RemoveOldDbAssets
+    [Migration("20190729124536_init")]
+    partial class init
     {
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
         {
@@ -35,7 +35,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("LastEditorPLangId");
 
@@ -56,7 +56,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -120,7 +120,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -130,7 +130,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -149,7 +149,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -158,7 +158,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -190,15 +190,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -239,15 +239,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -300,14 +300,14 @@ namespace ClientServer.Migrations
                     b.Property<int>("AfterSolutionId");
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -343,15 +343,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -387,15 +387,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -466,7 +466,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsOnlyVisibleToOwner");
 
@@ -475,10 +475,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserGroupId");
 
@@ -499,7 +499,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -570,7 +570,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("GeneratedCode")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("HadAutomaticAssessmentErrors");
 
@@ -597,7 +597,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("MaxManualPoint");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("PLangId");
 
@@ -650,15 +650,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -715,14 +715,14 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<int?>("MainFileId");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
 
@@ -745,10 +745,10 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<int?>("ManualPoints");
 
@@ -759,7 +759,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("NormalTestPoints");
 
                     b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int?>("SubmitTestPoints");
 
@@ -774,14 +774,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -827,15 +827,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -860,19 +860,19 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Description")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -912,14 +912,14 @@ namespace ClientServer.Migrations
                         .IsRequired();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsContentVisibleForUser");
 
@@ -940,14 +940,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseReleaseId");
 
@@ -974,7 +974,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("CompileTimeoutInMs");
 
                     b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -1002,14 +1002,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseId");
 
@@ -1043,7 +1043,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("CompileTimeoutInMs");
 
                     b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -1068,10 +1068,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1103,15 +1103,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1128,15 +1128,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1153,15 +1153,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1178,10 +1178,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Language")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1198,16 +1198,16 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1223,17 +1223,17 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("ExpirationDateTime");
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("UserId");
 
@@ -1254,13 +1254,13 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1268,7 +1268,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserId");
 
@@ -1291,7 +1291,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("GroupRolePermissionId");
 
@@ -1365,7 +1365,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("TabSize");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("UseWrapping");
 
@@ -1388,7 +1388,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("UserId");
 
@@ -1413,10 +1413,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1476,7 +1476,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("CustomProjectTestCompileTimeoutInMs");
 
@@ -1513,18 +1513,18 @@ namespace ClientServer.Migrations
                     b.Property<int>("SubmitTestServerTimeoutInMs");
 
                     b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("TestServerTimeoutInMs");
 
                     b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1548,28 +1548,28 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsActivated");
 
                     b.Property<DateTime>("LastLoginAt");
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Password")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("SystemRoleId");
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1589,10 +1589,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
diff --git a/src/ClientServer/Migrations/20160824181544_init.cs b/src/ClientServer/Migrations/20190729124536_init.cs
old mode 100644
new mode 100755
similarity index 53%
rename from src/ClientServer/Migrations/20160824181544_init.cs
rename to src/ClientServer/Migrations/20190729124536_init.cs
index bb8b120..4541188
--- a/src/ClientServer/Migrations/20160824181544_init.cs
+++ b/src/ClientServer/Migrations/20190729124536_init.cs
@@ -21,18 +21,41 @@ namespace ClientServer.Migrations
                 });
 
             migrationBuilder.CreateTable(
-                name: "ContentTypes",
+                name: "CustomProjectTestAssets",
                 columns: table => new
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    Content = table.Column<byte[]>(nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    Hash = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Type = table.Column<string>(nullable: true)
+                    MimeType = table.Column<string>(maxLength: 2000, nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectTestAssets", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "SolutionAssessment",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    FeedbackForStudent = table.Column<string>(maxLength: 10000, nullable: true),
+                    LastAssessmentErrorMessage = table.Column<string>(maxLength: 80000, nullable: true),
+                    ManualPoints = table.Column<int>(nullable: true),
+                    MaxNormalTestPoints = table.Column<int>(nullable: false),
+                    MaxSubmitTestPoints = table.Column<int>(nullable: false),
+                    NormalTestPoints = table.Column<int>(nullable: true),
+                    NoteForOtherTutors = table.Column<string>(maxLength: 10000, nullable: true),
+                    SubmitTestPoints = table.Column<int>(nullable: true)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_ContentTypes", x => x.Id);
+                    table.PrimaryKey("PK_SolutionAssessment", x => x.Id);
                 });
 
             migrationBuilder.CreateTable(
@@ -42,7 +65,11 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
+                    Description = table.Column<string>(maxLength: 2000, nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    HtmlBackgroundColor = table.Column<string>(maxLength: 2000, nullable: true),
+                    HtmlColor = table.Column<string>(maxLength: 2000, nullable: true),
+                    HtmlIcon = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
                 constraints: table =>
@@ -56,6 +83,8 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CompileTimeoutInMs = table.Column<int>(nullable: false),
+                    CompilerOptions = table.Column<string>(maxLength: 2000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
                     MaxDiskSpaceInKb = table.Column<int>(nullable: false),
@@ -74,8 +103,8 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    InternalName = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    InternalName = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
                 constraints: table =>
@@ -83,6 +112,60 @@ namespace ClientServer.Migrations
                     table.PrimaryKey("PK_TestTypes", x => x.Id);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "FileReferenceMarkdownAssets",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    Hash = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MimeType = table.Column<string>(maxLength: 2000, nullable: true),
+                    OriginalName = table.Column<string>(maxLength: 2000, nullable: true),
+                    SizeInBytes = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_FileReferenceMarkdownAssets", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "FileReferenceTestAssets",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    Hash = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MimeType = table.Column<string>(maxLength: 2000, nullable: true),
+                    OriginalName = table.Column<string>(maxLength: 2000, nullable: true),
+                    SizeInBytes = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_FileReferenceTestAssets", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "FileReferenceUserFileAssets",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    Hash = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MimeType = table.Column<string>(maxLength: 2000, nullable: true),
+                    OriginalName = table.Column<string>(maxLength: 2000, nullable: true),
+                    SizeInBytes = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_FileReferenceUserFileAssets", x => x.Id);
+                });
+
             migrationBuilder.CreateTable(
                 name: "Langs",
                 columns: table => new
@@ -90,7 +173,8 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    Language = table.Column<string>(nullable: true),
+                    LangShortcut = table.Column<string>(maxLength: 2000, nullable: true),
+                    Language = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
                 constraints: table =>
@@ -105,8 +189,10 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    InternalName = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    EditorHighlightModeName = table.Column<string>(maxLength: 2000, nullable: true),
+                    FileExtensionsWithDot = table.Column<string>(maxLength: 2000, nullable: true),
+                    InternalName = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
                 constraints: table =>
@@ -123,14 +209,15 @@ namespace ClientServer.Migrations
                     CanAddUserToGroup = table.Column<bool>(nullable: false),
                     CanAssessExercises = table.Column<bool>(nullable: false),
                     CanChangeExercises = table.Column<bool>(nullable: false),
+                    CanChangeGroupData = table.Column<bool>(nullable: false),
                     CanChangeOtherMembersRole = table.Column<bool>(nullable: false),
-                    CanCopyExercises = table.Column<bool>(nullable: false),
                     CanCreateExercises = table.Column<bool>(nullable: false),
                     CanDeleteExercises = table.Column<bool>(nullable: false),
-                    CanExportExerciseResults = table.Column<bool>(nullable: false),
-                    CanReleaseExercises = table.Column<bool>(nullable: false),
+                    CanLockExercisesPermanently = table.Column<bool>(nullable: false),
+                    CanManageExerciseReleases = table.Column<bool>(nullable: false),
                     CanRemoveMemberFromGroup = table.Column<bool>(nullable: false),
                     CanSeeExercisesFromOthersInGroup = table.Column<bool>(nullable: false),
+                    CanSeeOtherMembers = table.Column<bool>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
@@ -139,20 +226,6 @@ namespace ClientServer.Migrations
                     table.PrimaryKey("PK_GroupRolePermissions", x => x.Id);
                 });
 
-            migrationBuilder.CreateTable(
-                name: "LdapUsers",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_LdapUsers", x => x.Id);
-                });
-
             migrationBuilder.CreateTable(
                 name: "CodeEditorSettings",
                 columns: table => new
@@ -167,7 +240,8 @@ namespace ClientServer.Migrations
                     ShowLineIndentions = table.Column<bool>(nullable: false),
                     ShowLineNumbers = table.Column<bool>(nullable: false),
                     TabSize = table.Column<int>(nullable: false),
-                    Theme = table.Column<string>(nullable: true)
+                    Theme = table.Column<string>(maxLength: 2000, nullable: true),
+                    UseWrapping = table.Column<bool>(nullable: false)
                 },
                 constraints: table =>
                 {
@@ -180,16 +254,18 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CanChangeGroups = table.Column<bool>(nullable: false),
                     CanChangeOtherUsersSystemRole = table.Column<bool>(nullable: false),
                     CanChangeRoles = table.Column<bool>(nullable: false),
                     CanChangeSystemSettings = table.Column<bool>(nullable: false),
+                    CanChangeUserData = table.Column<bool>(nullable: false),
                     CanCreateGroups = table.Column<bool>(nullable: false),
                     CanCreateRoles = table.Column<bool>(nullable: false),
                     CanDeleteActivatedUsers = table.Column<bool>(nullable: false),
                     CanDeleteGroups = table.Column<bool>(nullable: false),
                     CanDeleteRoles = table.Column<bool>(nullable: false),
                     CanManageNewUsers = table.Column<bool>(nullable: false),
+                    CanManageTags = table.Column<bool>(nullable: false),
+                    CanViewDashboard = table.Column<bool>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
@@ -205,8 +281,8 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    Email = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    Email = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
                 constraints: table =>
@@ -221,7 +297,7 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
                     GroupRolePermissionId = table.Column<int>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
                 },
@@ -243,8 +319,8 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    Email = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    Email = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
                     SystemRolePermissionId = table.Column<int>(nullable: false)
                 },
@@ -266,11 +342,29 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
+                    CurrentServerMessage = table.Column<string>(maxLength: 10000, nullable: true),
+                    CustomProjectTestCompileTimeoutInMs = table.Column<int>(nullable: false),
+                    CustomProjectTestMaxDiskSpaceInKb = table.Column<int>(nullable: false),
+                    CustomProjectTestMemoryLimitInKb = table.Column<int>(nullable: false),
+                    CustomProjectTestTimeoutInMs = table.Column<int>(nullable: false),
                     DefaultGroupCreatorGroupRoleId = table.Column<int>(nullable: false),
                     DefaultGroupRoleId = table.Column<int>(nullable: false),
                     DefaultUserGroupId = table.Column<int>(nullable: false),
+                    JustRunProgramCompileTimeoutInMs = table.Column<int>(nullable: false),
+                    JustRunProgramMaxDiskSpaceInKb = table.Column<int>(nullable: false),
+                    JustRunProgramMemoryLimitInKb = table.Column<int>(nullable: false),
+                    JustRunProgramTimeoutInMs = table.Column<int>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MaxSolutionVersionsPerUser = table.Column<int>(nullable: false, defaultValue: 10)
+                    MaxCustomProjectsPerUser = table.Column<int>(nullable: false),
+                    MaxCustomTestsPerParticipation = table.Column<int>(nullable: false),
+                    MaxNumberOfTestsWithOneRequest = table.Column<int>(nullable: false),
+                    MaxNumberOfTestsWithOneRequestSubmitTestServer = table.Column<int>(nullable: false),
+                    SubmitTestServerTimeoutInMs = table.Column<int>(nullable: false),
+                    SubmitTestServerUrl = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestServerConfigUiUrl = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestServerStatsUrl = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestServerTimeoutInMs = table.Column<int>(nullable: false),
+                    TestServerUrl = table.Column<string>(maxLength: 2000, nullable: true)
                 },
                 constraints: table =>
                 {
@@ -280,19 +374,19 @@ namespace ClientServer.Migrations
                         column: x => x.DefaultGroupCreatorGroupRoleId,
                         principalTable: "GroupRoles",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                     table.ForeignKey(
                         name: "FK_SystemSettings_GroupRoles_DefaultGroupRoleId",
                         column: x => x.DefaultGroupRoleId,
                         principalTable: "GroupRoles",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                     table.ForeignKey(
                         name: "FK_SystemSettings_UserGroups_DefaultUserGroupId",
                         column: x => x.DefaultUserGroupId,
                         principalTable: "UserGroups",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                 });
 
             migrationBuilder.CreateTable(
@@ -302,28 +396,20 @@ namespace ClientServer.Migrations
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    Email = table.Column<string>(nullable: true),
-                    FirstName = table.Column<string>(nullable: true),
+                    Email = table.Column<string>(maxLength: 2000, nullable: true),
+                    FirstName = table.Column<string>(maxLength: 2000, nullable: true),
                     IsActivated = table.Column<bool>(nullable: false),
                     LastLoginAt = table.Column<DateTime>(nullable: false),
-                    LastName = table.Column<string>(nullable: true),
+                    LastName = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    LdapUserId = table.Column<int>(nullable: true),
-                    Password = table.Column<string>(nullable: true),
-                    StudentNumber = table.Column<string>(nullable: true),
+                    Password = table.Column<string>(maxLength: 2000, nullable: true),
                     SystemRoleId = table.Column<int>(nullable: true),
-                    Token = table.Column<string>(nullable: false)
+                    Token = table.Column<string>(maxLength: 2000, nullable: false)
                 },
                 constraints: table =>
                 {
                     table.PrimaryKey("PK_Users", x => x.Id);
                     table.UniqueConstraint("Unique_Token", x => x.Token);
-                    table.ForeignKey(
-                        name: "FK_Users_LdapUsers_LdapUserId",
-                        column: x => x.LdapUserId,
-                        principalTable: "LdapUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
                         name: "FK_Users_SystemRoles_SystemRoleId",
                         column: x => x.SystemRoleId,
@@ -332,6 +418,29 @@ namespace ClientServer.Migrations
                         onDelete: ReferentialAction.SetNull);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "CustomProjects",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastEditorPLangId = table.Column<int>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    UserId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjects", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_CustomProjects_Users_UserId",
+                        column: x => x.UserId,
+                        principalTable: "Users",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
             migrationBuilder.CreateTable(
                 name: "Exercises",
                 columns: table => new
@@ -341,11 +450,12 @@ namespace ClientServer.Migrations
                     CanUserCreateCustomTests = table.Column<bool>(nullable: false),
                     CanUserCreateFiles = table.Column<bool>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    IsOnlyVisibleToMe = table.Column<bool>(nullable: false),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    IsOnlyVisibleToOwner = table.Column<bool>(nullable: false),
+                    IsPermanentlyLocked = table.Column<bool>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    ShortDescription = table.Column<string>(nullable: true),
-                    ShouldShowSubmitResult = table.Column<bool>(nullable: false),
+                    Note = table.Column<string>(maxLength: 10000, nullable: true),
+                    ShortDescription = table.Column<string>(maxLength: 2000, nullable: true),
                     UserGroupId = table.Column<int>(nullable: false),
                     UserId = table.Column<int>(nullable: true)
                 },
@@ -366,6 +476,56 @@ namespace ClientServer.Migrations
                         onDelete: ReferentialAction.SetNull);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "AuthTokens",
+                columns: table => new
+                {
+                    UserId = table.Column<int>(nullable: false),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    CsrfToken = table.Column<string>(maxLength: 2000, nullable: true),
+                    ExpirationDateTime = table.Column<DateTime>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    RandomSecret = table.Column<string>(maxLength: 2000, nullable: true),
+                    UserAuthToken = table.Column<string>(maxLength: 2000, nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_AuthTokens", x => x.UserId);
+                    table.ForeignKey(
+                        name: "FK_AuthTokens_Users_UserId",
+                        column: x => x.UserId,
+                        principalTable: "Users",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "ExternalUsers",
+                columns: table => new
+                {
+                    ExternalId = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    Email = table.Column<string>(maxLength: 2000, nullable: true),
+                    FirstName = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastName = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    NeedToRefreshData = table.Column<bool>(nullable: false),
+                    Token = table.Column<string>(maxLength: 2000, nullable: false),
+                    UserId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_ExternalUsers", x => x.ExternalId);
+                    table.UniqueConstraint("Unique_ExternalToken", x => x.Token);
+                    table.ForeignKey(
+                        name: "FK_ExternalUsers_Users_UserId",
+                        column: x => x.UserId,
+                        principalTable: "Users",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
             migrationBuilder.CreateTable(
                 name: "UserSettingses",
                 columns: table => new
@@ -374,8 +534,9 @@ namespace ClientServer.Migrations
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
                     CodeEditorSettingsId = table.Column<int>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    LangId = table.Column<int>(nullable: false),
+                    LangId = table.Column<int>(nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    Theme = table.Column<string>(maxLength: 2000, nullable: true),
                     UserId = table.Column<int>(nullable: true)
                 },
                 constraints: table =>
@@ -419,7 +580,7 @@ namespace ClientServer.Migrations
                         column: x => x.GroupRoleId,
                         principalTable: "GroupRoles",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
+                        onDelete: ReferentialAction.Restrict);
                     table.ForeignKey(
                         name: "FK_UserWithUserGroups_UserGroups_UserGroupId",
                         column: x => x.UserGroupId,
@@ -434,13 +595,74 @@ namespace ClientServer.Migrations
                         onDelete: ReferentialAction.Cascade);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "CustomProjectDescriptions",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    Content = table.Column<string>(maxLength: 50000, nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    CustomProjectId = table.Column<int>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectDescriptions", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectDescriptions_CustomProjects_CustomProjectId",
+                        column: x => x.CustomProjectId,
+                        principalTable: "CustomProjects",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CustomProjectTests",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    Content = table.Column<string>(maxLength: 80000, nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    CustomProjectId = table.Column<int>(nullable: false),
+                    DisplayIndex = table.Column<int>(nullable: false),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    TestSettingsId = table.Column<int>(nullable: false),
+                    TestTypeId = table.Column<int>(nullable: false),
+                    Weight = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectTests", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTests_CustomProjects_CustomProjectId",
+                        column: x => x.CustomProjectId,
+                        principalTable: "CustomProjects",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTests_TestCaseSettingses_TestSettingsId",
+                        column: x => x.TestSettingsId,
+                        principalTable: "TestCaseSettingses",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTests_TestTypes_TestTypeId",
+                        column: x => x.TestTypeId,
+                        principalTable: "TestTypes",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
             migrationBuilder.CreateTable(
                 name: "ExerciseDescriptions",
                 columns: table => new
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
+                    Content = table.Column<string>(maxLength: 50000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     ExerciseId = table.Column<int>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false)
@@ -495,16 +717,28 @@ namespace ClientServer.Migrations
                     AvailableWorkingTimeInMinutes = table.Column<int>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     ExerciseId = table.Column<int>(nullable: false),
-                    GeneratedCode = table.Column<string>(nullable: false),
+                    GeneratedCode = table.Column<string>(maxLength: 2000, nullable: false),
+                    HadAutomaticAssessmentErrors = table.Column<bool>(nullable: false),
+                    HasAutomaticAssessmentFinished = table.Column<bool>(nullable: false),
+                    HasAutomaticAssessmentStarted = table.Column<bool>(nullable: false),
                     HasLimitedWorkingTime = table.Column<bool>(nullable: false),
+                    HideExerciseLeaveActions = table.Column<bool>(nullable: false),
+                    HideInOverviews = table.Column<bool>(nullable: false),
+                    HidePrintOptions = table.Column<bool>(nullable: false),
+                    HideSiteHeaderBar = table.Column<bool>(nullable: false),
                     IsReleased = table.Column<bool>(nullable: false),
                     IsVisibleToAllAfterRelease = table.Column<bool>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    Note = table.Column<string>(nullable: true),
-                    PLangId = table.Column<int>(nullable: true),
+                    MaxManualPoint = table.Column<int>(nullable: true),
+                    Note = table.Column<string>(maxLength: 10000, nullable: true),
+                    PLangId = table.Column<int>(nullable: false),
                     ReleaseDurationType = table.Column<int>(nullable: false),
                     ReleaseStartType = table.Column<int>(nullable: false),
-                    ReleasedAt = table.Column<DateTime>(nullable: true)
+                    ReleasedAt = table.Column<DateTime>(nullable: true),
+                    RunAlsoNormalTests = table.Column<bool>(nullable: false),
+                    ShouldAutomaticAssessSubmissions = table.Column<bool>(nullable: false),
+                    ShouldClearClipboard = table.Column<bool>(nullable: false),
+                    ShowAdditionalLogButton = table.Column<bool>(nullable: false)
                 },
                 constraints: table =>
                 {
@@ -521,7 +755,7 @@ namespace ClientServer.Migrations
                         column: x => x.PLangId,
                         principalTable: "PLangs",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                 });
 
             migrationBuilder.CreateTable(
@@ -530,6 +764,8 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CompileTimeoutInMs = table.Column<int>(nullable: false),
+                    CompilerOptions = table.Column<string>(maxLength: 2000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     ExerciseId = table.Column<int>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
@@ -554,10 +790,10 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
+                    Content = table.Column<string>(maxLength: 80000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     DisplayIndex = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
                     ExerciseId = table.Column<int>(nullable: false),
                     IsSubmitTest = table.Column<bool>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
@@ -589,28 +825,75 @@ namespace ClientServer.Migrations
                 });
 
             migrationBuilder.CreateTable(
-                name: "Assets",
+                name: "CustomProjectDescriptionWithFileAsAssetReferences",
+                columns: table => new
+                {
+                    CustomProjectDescriptionId = table.Column<int>(nullable: false),
+                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectDescriptionWithFileAsAssetReferences", x => new { x.CustomProjectDescriptionId, x.FileReferenceUserFileAssetId });
+                    table.ForeignKey(
+                        name: "FK_CustomProjectDescriptionWithFileAsAssetReferences_CustomProjectDescriptions_CustomProjectDescriptionId",
+                        column: x => x.CustomProjectDescriptionId,
+                        principalTable: "CustomProjectDescriptions",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectDescriptionWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
+                        column: x => x.FileReferenceUserFileAssetId,
+                        principalTable: "FileReferenceUserFileAssets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CustomProjectTestWithFileAsAssetReferences",
+                columns: table => new
+                {
+                    CustomProjectTestId = table.Column<int>(nullable: false),
+                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectTestWithFileAsAssetReferences", x => new { x.CustomProjectTestId, x.FileReferenceUserFileAssetId });
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTestWithFileAsAssetReferences_CustomProjectTests_CustomProjectTestId",
+                        column: x => x.CustomProjectTestId,
+                        principalTable: "CustomProjectTests",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTestWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
+                        column: x => x.FileReferenceUserFileAssetId,
+                        principalTable: "FileReferenceUserFileAssets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "ExerciseDescriptionWithFileAsAssetReferences",
                 columns: table => new
                 {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    AssetUrl = table.Column<string>(nullable: true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
                     ExerciseDescriptionId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(nullable: true)
+                    FileReferenceMarkdownAssetId = table.Column<int>(nullable: false)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_Assets", x => x.Id);
+                    table.PrimaryKey("PK_ExerciseDescriptionWithFileAsAssetReferences", x => new { x.ExerciseDescriptionId, x.FileReferenceMarkdownAssetId });
                     table.ForeignKey(
-                        name: "FK_Assets_ExerciseDescriptions_ExerciseDescriptionId",
+                        name: "FK_ExerciseDescriptionWithFileAsAssetReferences_ExerciseDescriptions_ExerciseDescriptionId",
                         column: x => x.ExerciseDescriptionId,
                         principalTable: "ExerciseDescriptions",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_ExerciseDescriptionWithFileAsAssetReferences_FileReferenceMarkdownAssets_FileReferenceMarkdownAssetId",
+                        column: x => x.FileReferenceMarkdownAssetId,
+                        principalTable: "FileReferenceMarkdownAssets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
@@ -636,7 +919,7 @@ namespace ClientServer.Migrations
                         column: x => x.TagId,
                         principalTable: "Tags",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
@@ -647,7 +930,9 @@ namespace ClientServer.Migrations
                     ExerciseReleaseId = table.Column<int>(nullable: false),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     LastEditedPLangId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    LockSolutionsFlag = table.Column<bool>(nullable: false),
+                    ShouldNotCount = table.Column<bool>(nullable: false)
                 },
                 constraints: table =>
                 {
@@ -663,7 +948,7 @@ namespace ClientServer.Migrations
                         column: x => x.LastEditedPLangId,
                         principalTable: "PLangs",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                     table.ForeignKey(
                         name: "FK_ExerciseReleaseWithUserAsParticipations_Users_UserId",
                         column: x => x.UserId,
@@ -673,23 +958,23 @@ namespace ClientServer.Migrations
                 });
 
             migrationBuilder.CreateTable(
-                name: "TestAssets",
+                name: "TestWithFileAsAssetReferences",
                 columns: table => new
                 {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(nullable: true),
-                    TestId = table.Column<int>(nullable: false)
+                    TestId = table.Column<int>(nullable: false),
+                    FileReferenceTestAssetId = table.Column<int>(nullable: false)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_TestAssets", x => x.Id);
+                    table.PrimaryKey("PK_TestWithFileAsAssetReferences", x => new { x.TestId, x.FileReferenceTestAssetId });
+                    table.ForeignKey(
+                        name: "FK_TestWithFileAsAssetReferences_FileReferenceTestAssets_FileReferenceTestAssetId",
+                        column: x => x.FileReferenceTestAssetId,
+                        principalTable: "FileReferenceTestAssets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
-                        name: "FK_TestAssets_Tests_TestId",
+                        name: "FK_TestWithFileAsAssetReferences_Tests_TestId",
                         column: x => x.TestId,
                         principalTable: "Tests",
                         principalColumn: "Id",
@@ -702,10 +987,10 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
+                    Content = table.Column<string>(maxLength: 80000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     DisplayIndex = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
+                    DisplayName = table.Column<string>(maxLength: 2000, nullable: true),
                     ExerciseReleaseId = table.Column<int>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
                     TestTypeId = table.Column<int>(nullable: false),
@@ -729,61 +1014,259 @@ namespace ClientServer.Migrations
                 });
 
             migrationBuilder.CreateTable(
-                name: "CustomTestAssets",
+                name: "CustomTestWithFileAsAssetReferences",
                 columns: table => new
                 {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<byte[]>(nullable: true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
                     CustomTestId = table.Column<int>(nullable: false),
-                    DisplayName = table.Column<string>(nullable: true),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MimeType = table.Column<string>(nullable: true)
+                    FileReferenceUserFileAssetId = table.Column<int>(nullable: false)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_CustomTestAssets", x => x.Id);
+                    table.PrimaryKey("PK_CustomTestWithFileAsAssetReferences", x => new { x.CustomTestId, x.FileReferenceUserFileAssetId });
                     table.ForeignKey(
-                        name: "FK_CustomTestAssets_CustomTest_CustomTestId",
+                        name: "FK_CustomTestWithFileAsAssetReferences_CustomTest_CustomTestId",
                         column: x => x.CustomTestId,
                         principalTable: "CustomTest",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomTestWithFileAsAssetReferences_FileReferenceUserFileAssets_FileReferenceUserFileAssetId",
+                        column: x => x.FileReferenceUserFileAssetId,
+                        principalTable: "FileReferenceUserFileAssets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
-                name: "TemplateFiles",
+                name: "CustomProjectSolutions",
                 columns: table => new
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CodeTemplateId = table.Column<int>(nullable: false),
-                    Content = table.Column<string>(nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    DisplayIndex = table.Column<int>(nullable: false),
-                    FileNameWithExtension = table.Column<string>(nullable: true),
-                    IsEditableByUser = table.Column<bool>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
+                    CustomProjectId = table.Column<int>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MainFileId = table.Column<int>(nullable: true),
+                    PLangId = table.Column<int>(nullable: false)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_TemplateFiles", x => x.Id);
+                    table.PrimaryKey("PK_CustomProjectSolutions", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectSolutions_CustomProjects_CustomProjectId",
+                        column: x => x.CustomProjectId,
+                        principalTable: "CustomProjects",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectSolutions_PLangs_PLangId",
+                        column: x => x.PLangId,
+                        principalTable: "PLangs",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
-                name: "Templates",
+                name: "CustomProjectSolutionFiles",
                 columns: table => new
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    Content = table.Column<string>(maxLength: 70000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
-                    ExerciseId = table.Column<int>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainFileId = table.Column<int>(nullable: true),
-                    PLangId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
+                    CustomProjectSolutionId = table.Column<int>(nullable: false),
+                    DisplayIndex = table.Column<int>(nullable: false),
+                    FileNameWithExtension = table.Column<string>(maxLength: 2000, nullable: true),
+                    IsDisplayed = table.Column<bool>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectSolutionFiles", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectSolutionFiles_CustomProjectSolutions_CustomProjectSolutionId",
+                        column: x => x.CustomProjectSolutionId,
+                        principalTable: "CustomProjectSolutions",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CustomProjectTestWithSolutionAsTestResults",
+                columns: table => new
+                {
+                    CustomProjectSolutionId = table.Column<int>(nullable: false),
+                    CustomProjectTestId = table.Column<int>(nullable: false),
+                    CompileTimeoutInMsUsed = table.Column<int>(nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    HasCompiled = table.Column<bool>(nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    Passed = table.Column<bool>(nullable: true),
+                    ProgramExitCode = table.Column<int>(nullable: true),
+                    Protocol = table.Column<string>(maxLength: 160100, nullable: true),
+                    RunnerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestResultCode = table.Column<int>(nullable: true),
+                    TestServerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TimeForCompiling = table.Column<int>(nullable: true),
+                    TimeForUserProgram = table.Column<int>(nullable: true),
+                    TimeoutInMsUsed = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomProjectTestWithSolutionAsTestResults", x => new { x.CustomProjectSolutionId, x.CustomProjectTestId });
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTestWithSolutionAsTestResults_CustomProjectSolutions_CustomProjectSolutionId",
+                        column: x => x.CustomProjectSolutionId,
+                        principalTable: "CustomProjectSolutions",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CustomProjectTestWithSolutionAsTestResults_CustomProjectTests_CustomProjectTestId",
+                        column: x => x.CustomProjectTestId,
+                        principalTable: "CustomProjectTests",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "AfterSolutionFiles",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    AfterSolutionId = table.Column<int>(nullable: false),
+                    Content = table.Column<string>(maxLength: 70000, nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    DisplayIndex = table.Column<int>(nullable: false),
+                    FileNameWithExtension = table.Column<string>(maxLength: 2000, nullable: true),
+                    IsDisplayed = table.Column<bool>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    TemplateFileId = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_AfterSolutionFiles", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CustomTestWithAfterSolutionAsTestResults",
+                columns: table => new
+                {
+                    CustomTestId = table.Column<int>(nullable: false),
+                    AfterSolutionId = table.Column<int>(nullable: false),
+                    CompileTimeoutInMsUsed = table.Column<int>(nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    HasCompiled = table.Column<bool>(nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    Passed = table.Column<bool>(nullable: true),
+                    ProgramExitCode = table.Column<int>(nullable: true),
+                    Protocol = table.Column<string>(maxLength: 160100, nullable: true),
+                    RunnerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestResultCode = table.Column<int>(nullable: true),
+                    TestServerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TimeForCompiling = table.Column<int>(nullable: true),
+                    TimeForUserProgram = table.Column<int>(nullable: true),
+                    TimeoutInMsUsed = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CustomTestWithAfterSolutionAsTestResults", x => new { x.CustomTestId, x.AfterSolutionId });
+                    table.ForeignKey(
+                        name: "FK_CustomTestWithAfterSolutionAsTestResults_CustomTest_CustomTestId",
+                        column: x => x.CustomTestId,
+                        principalTable: "CustomTest",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "TestWithAfterSolutionAsTestResults",
+                columns: table => new
+                {
+                    TestId = table.Column<int>(nullable: false),
+                    AfterSolutionId = table.Column<int>(nullable: false),
+                    CompileTimeoutInMsUsed = table.Column<int>(nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    HasCompiled = table.Column<bool>(nullable: true),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    Passed = table.Column<bool>(nullable: true),
+                    ProgramExitCode = table.Column<int>(nullable: true),
+                    Protocol = table.Column<string>(maxLength: 160100, nullable: true),
+                    RunnerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestResultCode = table.Column<int>(nullable: true),
+                    TestServerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TimeForCompiling = table.Column<int>(nullable: true),
+                    TimeForUserProgram = table.Column<int>(nullable: true),
+                    TimeoutInMsUsed = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_TestWithAfterSolutionAsTestResults", x => new { x.TestId, x.AfterSolutionId });
+                    table.ForeignKey(
+                        name: "FK_TestWithAfterSolutionAsTestResults_Tests_TestId",
+                        column: x => x.TestId,
+                        principalTable: "Tests",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "AfterSolutions",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MainFileId = table.Column<int>(nullable: true),
+                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
+                    SolutionPLangId = table.Column<int>(nullable: false),
+                    SolutionUserId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_AfterSolutions", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_AfterSolutions_AfterSolutionFiles_MainFileId",
+                        column: x => x.MainFileId,
+                        principalTable: "AfterSolutionFiles",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.SetNull);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "TemplateFiles",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CodeTemplateId = table.Column<int>(nullable: false),
+                    Content = table.Column<string>(maxLength: 70000, nullable: true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    DisplayIndex = table.Column<int>(nullable: false),
+                    FileNameWithExtension = table.Column<string>(maxLength: 2000, nullable: true),
+                    IsContentVisibleForUser = table.Column<bool>(nullable: false),
+                    IsEditableByUser = table.Column<bool>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_TemplateFiles", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Templates",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
+                    CreatedAt = table.Column<DateTime>(nullable: false),
+                    ExerciseId = table.Column<int>(nullable: false),
+                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
+                    MainFileId = table.Column<int>(nullable: true),
+                    PLangId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
                 {
                     table.PrimaryKey("PK_Templates", x => x.Id);
                     table.ForeignKey(
@@ -803,7 +1286,7 @@ namespace ClientServer.Migrations
                         column: x => x.PLangId,
                         principalTable: "PLangs",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                 });
 
             migrationBuilder.CreateTable(
@@ -815,18 +1298,26 @@ namespace ClientServer.Migrations
                     PLangId = table.Column<int>(nullable: false),
                     AssessmentId = table.Column<int>(nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
+                    LastEditingIpAddress = table.Column<string>(maxLength: 2000, nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainSolutionVersionid = table.Column<int>(nullable: false)
+                    MainFileId = table.Column<int>(nullable: true),
+                    Note = table.Column<string>(maxLength: 10000, nullable: true)
                 },
                 constraints: table =>
                 {
                     table.PrimaryKey("PK_Solutions", x => new { x.UserId, x.ExerciseReleaseId, x.PLangId });
+                    table.ForeignKey(
+                        name: "FK_Solutions_SolutionAssessment_AssessmentId",
+                        column: x => x.AssessmentId,
+                        principalTable: "SolutionAssessment",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
                         name: "FK_Solutions_PLangs_PLangId",
                         column: x => x.PLangId,
                         principalTable: "PLangs",
                         principalColumn: "Id",
-                        onDelete: ReferentialAction.SetNull);
+                        onDelete: ReferentialAction.Restrict);
                     table.ForeignKey(
                         name: "FK_Solutions_ExerciseReleaseWithUserAsParticipations_UserId_ExerciseReleaseId",
                         columns: x => new { x.UserId, x.ExerciseReleaseId },
@@ -836,83 +1327,41 @@ namespace ClientServer.Migrations
                 });
 
             migrationBuilder.CreateTable(
-                name: "SolutionVersions",
+                name: "CustomTestWithSingleSolutionAsTestResult",
                 columns: table => new
                 {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    CreatedAt = table.Column<DateTime>(nullable: false),
-                    LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    MainFileId = table.Column<int>(nullable: true),
-                    Note = table.Column<string>(nullable: true),
+                    CustomTestId = table.Column<int>(nullable: false),
+                    SolutionUserId = table.Column<int>(nullable: false),
                     SolutionExerciseReleaseId = table.Column<int>(nullable: false),
                     SolutionPLangId = table.Column<int>(nullable: false),
-                    SolutionUserId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_SolutionVersions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_SolutionVersions_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
-                        principalTable: "Solutions",
-                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "CustomTestWithSolutionAsTestResults",
-                columns: table => new
-                {
-                    CustomTestId = table.Column<int>(nullable: false),
-                    SolutionVersionId = table.Column<int>(nullable: false),
+                    CompileTimeoutInMsUsed = table.Column<int>(nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     HasCompiled = table.Column<bool>(nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
                     Passed = table.Column<bool>(nullable: true),
                     ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
+                    Protocol = table.Column<string>(maxLength: 160100, nullable: true),
+                    RunnerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestResultCode = table.Column<int>(nullable: true),
+                    TestServerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TimeForCompiling = table.Column<int>(nullable: true),
+                    TimeForUserProgram = table.Column<int>(nullable: true),
+                    TimeoutInMsUsed = table.Column<int>(nullable: true)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_CustomTestWithSolutionAsTestResults", x => new { x.CustomTestId, x.SolutionVersionId });
+                    table.PrimaryKey("PK_CustomTestWithSingleSolutionAsTestResult", x => new { x.CustomTestId, x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId });
                     table.ForeignKey(
-                        name: "FK_CustomTestWithSolutionAsTestResults_CustomTest_CustomTestId",
+                        name: "FK_CustomTestWithSingleSolutionAsTestResult_CustomTest_CustomTestId",
                         column: x => x.CustomTestId,
                         principalTable: "CustomTest",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
-                        name: "FK_CustomTestWithSolutionAsTestResults_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "SolutionAssessment",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    ManualPoints = table.Column<int>(nullable: true),
-                    MaxNormalTestPoints = table.Column<int>(nullable: false),
-                    MaxSubmitTestPoints = table.Column<int>(nullable: false),
-                    NormalTestPoints = table.Column<int>(nullable: false),
-                    Note = table.Column<string>(nullable: true),
-                    SolutionVersionId = table.Column<int>(nullable: false),
-                    SubmitTestPoints = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_SolutionAssessment", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
+                        name: "FK_CustomTestWithSingleSolutionAsTestResult_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
+                        principalTable: "Solutions",
+                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
                         onDelete: ReferentialAction.Cascade);
                 });
 
@@ -922,67 +1371,192 @@ namespace ClientServer.Migrations
                 {
                     Id = table.Column<int>(nullable: false)
                         .Annotation("Npgsql:ValueGeneratedOnAdd", true),
-                    Content = table.Column<string>(nullable: true),
+                    Content = table.Column<string>(maxLength: 70000, nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     DisplayIndex = table.Column<int>(nullable: false),
-                    FileNameWithExtension = table.Column<string>(nullable: true),
+                    FileNameWithExtension = table.Column<string>(maxLength: 2000, nullable: true),
                     IsDisplayed = table.Column<bool>(nullable: false),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
-                    SolutionVersionId = table.Column<int>(nullable: false),
+                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
+                    SolutionPLangId = table.Column<int>(nullable: false),
+                    SolutionUserId = table.Column<int>(nullable: false),
                     TemplateFileId = table.Column<int>(nullable: true)
                 },
                 constraints: table =>
                 {
                     table.PrimaryKey("PK_SolutionFiles", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_SolutionFiles_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
                         name: "FK_SolutionFiles_TemplateFiles_TemplateFileId",
                         column: x => x.TemplateFileId,
                         principalTable: "TemplateFiles",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.SetNull);
+                    table.ForeignKey(
+                        name: "FK_SolutionFiles_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
+                        principalTable: "Solutions",
+                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
-                name: "TestResults",
+                name: "TestWithSingleSolutionAsTestResult",
                 columns: table => new
                 {
                     TestId = table.Column<int>(nullable: false),
-                    SolutionVersionId = table.Column<int>(nullable: false),
+                    SolutionUserId = table.Column<int>(nullable: false),
+                    SolutionExerciseReleaseId = table.Column<int>(nullable: false),
+                    SolutionPLangId = table.Column<int>(nullable: false),
+                    CompileTimeoutInMsUsed = table.Column<int>(nullable: true),
                     CreatedAt = table.Column<DateTime>(nullable: false),
                     HasCompiled = table.Column<bool>(nullable: true),
                     LastUpdatedAt = table.Column<DateTime>(nullable: false),
                     Passed = table.Column<bool>(nullable: true),
                     ProgramExitCode = table.Column<int>(nullable: true),
-                    Protocol = table.Column<string>(nullable: true),
-                    TestResultCode = table.Column<int>(nullable: true)
+                    Protocol = table.Column<string>(maxLength: 160100, nullable: true),
+                    RunnerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TestResultCode = table.Column<int>(nullable: true),
+                    TestServerVersion = table.Column<string>(maxLength: 2000, nullable: true),
+                    TimeForCompiling = table.Column<int>(nullable: true),
+                    TimeForUserProgram = table.Column<int>(nullable: true),
+                    TimeoutInMsUsed = table.Column<int>(nullable: true)
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_TestResults", x => new { x.TestId, x.SolutionVersionId });
-                    table.ForeignKey(
-                        name: "FK_TestResults_SolutionVersions_SolutionVersionId",
-                        column: x => x.SolutionVersionId,
-                        principalTable: "SolutionVersions",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
+                    table.PrimaryKey("PK_TestWithSingleSolutionAsTestResult", x => new { x.TestId, x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId });
                     table.ForeignKey(
-                        name: "FK_TestResults_Tests_TestId",
+                        name: "FK_TestWithSingleSolutionAsTestResult_Tests_TestId",
                         column: x => x.TestId,
                         principalTable: "Tests",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_TestWithSingleSolutionAsTestResult_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                        columns: x => new { x.SolutionUserId, x.SolutionExerciseReleaseId, x.SolutionPLangId },
+                        principalTable: "Solutions",
+                        principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateIndex(
-                name: "IX_Assets_ExerciseDescriptionId",
-                table: "Assets",
-                column: "ExerciseDescriptionId");
+                name: "IX_CustomProjects_UserId",
+                table: "CustomProjects",
+                column: "UserId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectDescriptions_CustomProjectId",
+                table: "CustomProjectDescriptions",
+                column: "CustomProjectId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectDescriptionWithFileAsAssetReferences_CustomProjectDescriptionId",
+                table: "CustomProjectDescriptionWithFileAsAssetReferences",
+                column: "CustomProjectDescriptionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectDescriptionWithFileAsAssetReferences_FileReferenceUserFileAssetId",
+                table: "CustomProjectDescriptionWithFileAsAssetReferences",
+                column: "FileReferenceUserFileAssetId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectSolutions_CustomProjectId",
+                table: "CustomProjectSolutions",
+                column: "CustomProjectId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectSolutions_MainFileId",
+                table: "CustomProjectSolutions",
+                column: "MainFileId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectSolutions_PLangId",
+                table: "CustomProjectSolutions",
+                column: "PLangId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectSolutionFiles_CustomProjectSolutionId",
+                table: "CustomProjectSolutionFiles",
+                column: "CustomProjectSolutionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTests_CustomProjectId",
+                table: "CustomProjectTests",
+                column: "CustomProjectId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTests_TestSettingsId",
+                table: "CustomProjectTests",
+                column: "TestSettingsId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTests_TestTypeId",
+                table: "CustomProjectTests",
+                column: "TestTypeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTestWithFileAsAssetReferences_CustomProjectTestId",
+                table: "CustomProjectTestWithFileAsAssetReferences",
+                column: "CustomProjectTestId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTestWithFileAsAssetReferences_FileReferenceUserFileAssetId",
+                table: "CustomProjectTestWithFileAsAssetReferences",
+                column: "FileReferenceUserFileAssetId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTestWithSolutionAsTestResults_CustomProjectSolutionId",
+                table: "CustomProjectTestWithSolutionAsTestResults",
+                column: "CustomProjectSolutionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomProjectTestWithSolutionAsTestResults_CustomProjectTestId",
+                table: "CustomProjectTestWithSolutionAsTestResults",
+                column: "CustomProjectTestId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_AfterSolutions_MainFileId",
+                table: "AfterSolutions",
+                column: "MainFileId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_AfterSolutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "AfterSolutions",
+                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" },
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_AfterSolutionFiles_AfterSolutionId",
+                table: "AfterSolutionFiles",
+                column: "AfterSolutionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_AfterSolutionFiles_TemplateFileId",
+                table: "AfterSolutionFiles",
+                column: "TemplateFileId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomTestWithAfterSolutionAsTestResults_AfterSolutionId",
+                table: "CustomTestWithAfterSolutionAsTestResults",
+                column: "AfterSolutionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomTestWithAfterSolutionAsTestResults_CustomTestId",
+                table: "CustomTestWithAfterSolutionAsTestResults",
+                column: "CustomTestId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TestWithAfterSolutionAsTestResults_AfterSolutionId",
+                table: "TestWithAfterSolutionAsTestResults",
+                column: "AfterSolutionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TestWithAfterSolutionAsTestResults_TestId",
+                table: "TestWithAfterSolutionAsTestResults",
+                column: "TestId");
 
             migrationBuilder.CreateIndex(
                 name: "IX_Templates_ExerciseId",
@@ -1000,6 +1574,16 @@ namespace ClientServer.Migrations
                 table: "Templates",
                 column: "PLangId");
 
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomTestWithFileAsAssetReferences_CustomTestId",
+                table: "CustomTestWithFileAsAssetReferences",
+                column: "CustomTestId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CustomTestWithFileAsAssetReferences_FileReferenceUserFileAssetId",
+                table: "CustomTestWithFileAsAssetReferences",
+                column: "FileReferenceUserFileAssetId");
+
             migrationBuilder.CreateIndex(
                 name: "IX_Exercises_UserGroupId",
                 table: "Exercises",
@@ -1016,6 +1600,16 @@ namespace ClientServer.Migrations
                 column: "ExerciseId",
                 unique: true);
 
+            migrationBuilder.CreateIndex(
+                name: "IX_ExerciseDescriptionWithFileAsAssetReferences_ExerciseDescriptionId",
+                table: "ExerciseDescriptionWithFileAsAssetReferences",
+                column: "ExerciseDescriptionId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_ExerciseDescriptionWithFileAsAssetReferences_FileReferenceMarkdownAssetId",
+                table: "ExerciseDescriptionWithFileAsAssetReferences",
+                column: "FileReferenceMarkdownAssetId");
+
             migrationBuilder.CreateIndex(
                 name: "IX_MetaDatas_ExerciseId",
                 table: "MetaDatas",
@@ -1038,14 +1632,14 @@ namespace ClientServer.Migrations
                 column: "PLangId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSolutionAsTestResults_CustomTestId",
-                table: "CustomTestWithSolutionAsTestResults",
+                name: "IX_CustomTestWithSingleSolutionAsTestResult_CustomTestId",
+                table: "CustomTestWithSingleSolutionAsTestResult",
                 column: "CustomTestId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_CustomTestWithSolutionAsTestResults_SolutionVersionId",
-                table: "CustomTestWithSolutionAsTestResults",
-                column: "SolutionVersionId");
+                name: "IX_CustomTestWithSingleSolutionAsTestResult_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "CustomTestWithSingleSolutionAsTestResult",
+                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
 
             migrationBuilder.CreateIndex(
                 name: "IX_ExerciseReleaseWithUserAsParticipations_ExerciseReleaseId",
@@ -1068,6 +1662,12 @@ namespace ClientServer.Migrations
                 column: "AssessmentId",
                 unique: true);
 
+            migrationBuilder.CreateIndex(
+                name: "IX_Solutions_MainFileId",
+                table: "Solutions",
+                column: "MainFileId",
+                unique: true);
+
             migrationBuilder.CreateIndex(
                 name: "IX_Solutions_PLangId",
                 table: "Solutions",
@@ -1078,41 +1678,30 @@ namespace ClientServer.Migrations
                 table: "Solutions",
                 columns: new[] { "UserId", "ExerciseReleaseId" });
 
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionAssessment_SolutionVersionId",
-                table: "SolutionAssessment",
-                column: "SolutionVersionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_SolutionFiles_SolutionVersionId",
-                table: "SolutionFiles",
-                column: "SolutionVersionId");
-
             migrationBuilder.CreateIndex(
                 name: "IX_SolutionFiles_TemplateFileId",
                 table: "SolutionFiles",
                 column: "TemplateFileId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_SolutionVersions_MainFileId",
-                table: "SolutionVersions",
-                column: "MainFileId",
-                unique: true);
+                name: "IX_SolutionFiles_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "SolutionFiles",
+                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
 
             migrationBuilder.CreateIndex(
-                name: "IX_SolutionVersions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
-                table: "SolutionVersions",
-                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
+                name: "IX_TestWithSingleSolutionAsTestResult_TestId",
+                table: "TestWithSingleSolutionAsTestResult",
+                column: "TestId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_TestResults_SolutionVersionId",
-                table: "TestResults",
-                column: "SolutionVersionId");
+                name: "IX_TestWithSingleSolutionAsTestResult_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "TestWithSingleSolutionAsTestResult",
+                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" });
 
             migrationBuilder.CreateIndex(
-                name: "IX_TestResults_TestId",
-                table: "TestResults",
-                column: "TestId");
+                name: "Unique_Tag",
+                table: "Tags",
+                column: "DisplayName");
 
             migrationBuilder.CreateIndex(
                 name: "IX_TagWithMetaDatas_MetaDataId",
@@ -1139,11 +1728,6 @@ namespace ClientServer.Migrations
                 table: "CustomTest",
                 columns: new[] { "UserId", "ExerciseReleaseId" });
 
-            migrationBuilder.CreateIndex(
-                name: "IX_CustomTestAssets_CustomTestId",
-                table: "CustomTestAssets",
-                column: "CustomTestId");
-
             migrationBuilder.CreateIndex(
                 name: "IX_DefaultCustomTestSettings_ExerciseId",
                 table: "DefaultCustomTestSettings",
@@ -1167,10 +1751,33 @@ namespace ClientServer.Migrations
                 column: "TestTypeId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_TestAssets_TestId",
-                table: "TestAssets",
+                name: "IX_TestWithFileAsAssetReferences_FileReferenceTestAssetId",
+                table: "TestWithFileAsAssetReferences",
+                column: "FileReferenceTestAssetId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TestWithFileAsAssetReferences_TestId",
+                table: "TestWithFileAsAssetReferences",
                 column: "TestId");
 
+            migrationBuilder.CreateIndex(
+                name: "IX_AuthTokens_UserAuthToken",
+                table: "AuthTokens",
+                column: "UserAuthToken",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_AuthTokens_UserId",
+                table: "AuthTokens",
+                column: "UserId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_ExternalUsers_UserId",
+                table: "ExternalUsers",
+                column: "UserId",
+                unique: true);
+
             migrationBuilder.CreateIndex(
                 name: "IX_GroupRoles_GroupRolePermissionId",
                 table: "GroupRoles",
@@ -1218,12 +1825,6 @@ namespace ClientServer.Migrations
                 column: "DefaultUserGroupId",
                 unique: true);
 
-            migrationBuilder.CreateIndex(
-                name: "IX_Users_LdapUserId",
-                table: "Users",
-                column: "LdapUserId",
-                unique: true);
-
             migrationBuilder.CreateIndex(
                 name: "IX_Users_SystemRoleId",
                 table: "Users",
@@ -1244,6 +1845,54 @@ namespace ClientServer.Migrations
                 table: "UserWithUserGroups",
                 column: "UserId");
 
+            migrationBuilder.AddForeignKey(
+                name: "FK_CustomProjectSolutions_CustomProjectSolutionFiles_MainFileId",
+                table: "CustomProjectSolutions",
+                column: "MainFileId",
+                principalTable: "CustomProjectSolutionFiles",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.SetNull);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_AfterSolutionFiles_AfterSolutions_AfterSolutionId",
+                table: "AfterSolutionFiles",
+                column: "AfterSolutionId",
+                principalTable: "AfterSolutions",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_AfterSolutionFiles_TemplateFiles_TemplateFileId",
+                table: "AfterSolutionFiles",
+                column: "TemplateFileId",
+                principalTable: "TemplateFiles",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_CustomTestWithAfterSolutionAsTestResults_AfterSolutions_AfterSolutionId",
+                table: "CustomTestWithAfterSolutionAsTestResults",
+                column: "AfterSolutionId",
+                principalTable: "AfterSolutions",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TestWithAfterSolutionAsTestResults_AfterSolutions_AfterSolutionId",
+                table: "TestWithAfterSolutionAsTestResults",
+                column: "AfterSolutionId",
+                principalTable: "AfterSolutions",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_AfterSolutions_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "AfterSolutions",
+                columns: new[] { "SolutionUserId", "SolutionExerciseReleaseId", "SolutionPLangId" },
+                principalTable: "Solutions",
+                principalColumns: new[] { "UserId", "ExerciseReleaseId", "PLangId" },
+                onDelete: ReferentialAction.Cascade);
+
             migrationBuilder.AddForeignKey(
                 name: "FK_TemplateFiles_Templates_CodeTemplateId",
                 table: "TemplateFiles",
@@ -1253,16 +1902,8 @@ namespace ClientServer.Migrations
                 onDelete: ReferentialAction.Cascade);
 
             migrationBuilder.AddForeignKey(
-                name: "FK_Solutions_SolutionAssessment_AssessmentId",
+                name: "FK_Solutions_SolutionFiles_MainFileId",
                 table: "Solutions",
-                column: "AssessmentId",
-                principalTable: "SolutionAssessment",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-
-            migrationBuilder.AddForeignKey(
-                name: "FK_SolutionVersions_SolutionFiles_MainFileId",
-                table: "SolutionVersions",
                 column: "MainFileId",
                 principalTable: "SolutionFiles",
                 principalColumn: "Id",
@@ -1272,20 +1913,28 @@ namespace ClientServer.Migrations
         protected override void Down(MigrationBuilder migrationBuilder)
         {
             migrationBuilder.DropForeignKey(
-                name: "FK_Templates_Exercises_ExerciseId",
-                table: "Templates");
+                name: "FK_CustomProjects_Users_UserId",
+                table: "CustomProjects");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleases_Exercises_ExerciseId",
-                table: "ExerciseReleases");
+                name: "FK_Exercises_Users_UserId",
+                table: "Exercises");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_Templates_TemplateFiles_MainFileId",
-                table: "Templates");
+                name: "FK_ExerciseReleaseWithUserAsParticipations_Users_UserId",
+                table: "ExerciseReleaseWithUserAsParticipations");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_SolutionFiles_TemplateFiles_TemplateFileId",
-                table: "SolutionFiles");
+                name: "FK_CustomProjectSolutions_CustomProjects_CustomProjectId",
+                table: "CustomProjectSolutions");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_CustomProjectSolutions_CustomProjectSolutionFiles_MainFileId",
+                table: "CustomProjectSolutions");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_Templates_PLangs_PLangId",
+                table: "Templates");
 
             migrationBuilder.DropForeignKey(
                 name: "FK_ExerciseReleases_PLangs_PLangId",
@@ -1300,43 +1949,64 @@ namespace ClientServer.Migrations
                 table: "Solutions");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_ExerciseReleaseWithUserAsParticipations_Users_UserId",
-                table: "ExerciseReleaseWithUserAsParticipations");
+                name: "FK_AfterSolutions_AfterSolutionFiles_MainFileId",
+                table: "AfterSolutions");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_SolutionAssessment_SolutionVersions_SolutionVersionId",
-                table: "SolutionAssessment");
+                name: "FK_SolutionFiles_Solutions_SolutionUserId_SolutionExerciseReleaseId_SolutionPLangId",
+                table: "SolutionFiles");
 
             migrationBuilder.DropForeignKey(
-                name: "FK_SolutionFiles_SolutionVersions_SolutionVersionId",
-                table: "SolutionFiles");
+                name: "FK_Templates_TemplateFiles_MainFileId",
+                table: "Templates");
 
             migrationBuilder.DropTable(
                 name: "AwaitDummies");
 
             migrationBuilder.DropTable(
-                name: "ContentTypes");
+                name: "CustomProjectDescriptionWithFileAsAssetReferences");
 
             migrationBuilder.DropTable(
-                name: "Assets");
+                name: "CustomProjectTestAssets");
 
             migrationBuilder.DropTable(
-                name: "CustomTestWithSolutionAsTestResults");
+                name: "CustomProjectTestWithFileAsAssetReferences");
 
             migrationBuilder.DropTable(
-                name: "TestResults");
+                name: "CustomProjectTestWithSolutionAsTestResults");
 
             migrationBuilder.DropTable(
-                name: "TagWithMetaDatas");
+                name: "CustomTestWithAfterSolutionAsTestResults");
+
+            migrationBuilder.DropTable(
+                name: "TestWithAfterSolutionAsTestResults");
+
+            migrationBuilder.DropTable(
+                name: "CustomTestWithFileAsAssetReferences");
+
+            migrationBuilder.DropTable(
+                name: "ExerciseDescriptionWithFileAsAssetReferences");
+
+            migrationBuilder.DropTable(
+                name: "CustomTestWithSingleSolutionAsTestResult");
 
             migrationBuilder.DropTable(
-                name: "CustomTestAssets");
+                name: "TestWithSingleSolutionAsTestResult");
+
+            migrationBuilder.DropTable(
+                name: "TagWithMetaDatas");
 
             migrationBuilder.DropTable(
                 name: "DefaultCustomTestSettings");
 
             migrationBuilder.DropTable(
-                name: "TestAssets");
+                name: "TestWithFileAsAssetReferences");
+
+            migrationBuilder.DropTable(
+                name: "AuthTokens");
+
+            migrationBuilder.DropTable(
+                name: "ExternalUsers");
 
             migrationBuilder.DropTable(
                 name: "UserSettingses");
@@ -1347,9 +2017,24 @@ namespace ClientServer.Migrations
             migrationBuilder.DropTable(
                 name: "UserWithUserGroups");
 
+            migrationBuilder.DropTable(
+                name: "CustomProjectDescriptions");
+
+            migrationBuilder.DropTable(
+                name: "CustomProjectTests");
+
+            migrationBuilder.DropTable(
+                name: "FileReferenceUserFileAssets");
+
             migrationBuilder.DropTable(
                 name: "ExerciseDescriptions");
 
+            migrationBuilder.DropTable(
+                name: "FileReferenceMarkdownAssets");
+
+            migrationBuilder.DropTable(
+                name: "CustomTest");
+
             migrationBuilder.DropTable(
                 name: "MetaDatas");
 
@@ -1357,7 +2042,7 @@ namespace ClientServer.Migrations
                 name: "Tags");
 
             migrationBuilder.DropTable(
-                name: "CustomTest");
+                name: "FileReferenceTestAssets");
 
             migrationBuilder.DropTable(
                 name: "Tests");
@@ -1381,49 +2066,58 @@ namespace ClientServer.Migrations
                 name: "GroupRolePermissions");
 
             migrationBuilder.DropTable(
-                name: "Exercises");
+                name: "Users");
 
             migrationBuilder.DropTable(
-                name: "UserGroups");
+                name: "SystemRoles");
 
             migrationBuilder.DropTable(
-                name: "TemplateFiles");
+                name: "SystemRolePermissions");
 
             migrationBuilder.DropTable(
-                name: "Templates");
+                name: "CustomProjects");
 
             migrationBuilder.DropTable(
-                name: "PLangs");
+                name: "CustomProjectSolutionFiles");
 
             migrationBuilder.DropTable(
-                name: "Users");
+                name: "CustomProjectSolutions");
 
             migrationBuilder.DropTable(
-                name: "LdapUsers");
+                name: "PLangs");
 
             migrationBuilder.DropTable(
-                name: "SystemRoles");
+                name: "AfterSolutionFiles");
 
             migrationBuilder.DropTable(
-                name: "SystemRolePermissions");
+                name: "AfterSolutions");
+
+            migrationBuilder.DropTable(
+                name: "Solutions");
 
             migrationBuilder.DropTable(
-                name: "SolutionVersions");
+                name: "SolutionAssessment");
 
             migrationBuilder.DropTable(
                 name: "SolutionFiles");
 
             migrationBuilder.DropTable(
-                name: "Solutions");
+                name: "ExerciseReleaseWithUserAsParticipations");
 
             migrationBuilder.DropTable(
-                name: "SolutionAssessment");
+                name: "ExerciseReleases");
 
             migrationBuilder.DropTable(
-                name: "ExerciseReleaseWithUserAsParticipations");
+                name: "TemplateFiles");
 
             migrationBuilder.DropTable(
-                name: "ExerciseReleases");
+                name: "Templates");
+
+            migrationBuilder.DropTable(
+                name: "Exercises");
+
+            migrationBuilder.DropTable(
+                name: "UserGroups");
         }
     }
 }
diff --git a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs b/src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.Designer.cs
similarity index 89%
rename from src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs
rename to src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.Designer.cs
index 4996cf0..557b03f 100755
--- a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs
+++ b/src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.Designer.cs
@@ -9,8 +9,8 @@ using ClientServer.Models.Exercises.Release;
 namespace ClientServer.Migrations
 {
     [DbContext(typeof(YapexDbContext))]
-    [Migration("20190601145551_ExerciseTestAssetFiles")]
-    partial class ExerciseTestAssetFiles
+    [Migration("20190729133239_addTestResultCharacterLimit")]
+    partial class addTestResultCharacterLimit
     {
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
         {
@@ -35,7 +35,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("LastEditorPLangId");
 
@@ -56,7 +56,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -72,6 +72,21 @@ namespace ClientServer.Migrations
                     b.ToTable("CustomProjectDescriptions");
                 });
 
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomProjectDescriptionId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomProjectDescriptionId", "FileReferenceUserFileAssetId");
+
+                    b.HasIndex("CustomProjectDescriptionId");
+
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomProjectDescriptionWithFileAsAssetReferences");
+                });
+
             modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
                 {
                     b.Property<int>("Id")
@@ -105,7 +120,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -115,7 +130,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -134,7 +149,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -143,7 +158,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -174,25 +189,35 @@ namespace ClientServer.Migrations
 
                     b.Property<DateTime>("CreatedAt");
 
-                    b.Property<int?>("CustomProjectTestId")
-                        .IsRequired();
-
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
+                    b.ToTable("CustomProjectTestAssets");
+                });
+
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomProjectTestId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomProjectTestId", "FileReferenceUserFileAssetId");
+
                     b.HasIndex("CustomProjectTestId");
 
-                    b.ToTable("CustomProjectTestAssets");
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomProjectTestWithFileAsAssetReferences");
                 });
 
             modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
@@ -201,6 +226,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CustomProjectTestId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -214,15 +243,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -275,14 +304,14 @@ namespace ClientServer.Migrations
                     b.Property<int>("AfterSolutionId");
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -305,6 +334,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("AfterSolutionId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -318,15 +351,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -349,6 +382,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("AfterSolutionId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -362,15 +399,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -387,40 +424,6 @@ namespace ClientServer.Migrations
                     b.ToTable("TestWithAfterSolutionAsTestResults");
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<string>("AssetUrl")
-                        .HasMaxLength(500);
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomProjectDescriptionId");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("ExerciseDescriptionId")
-                        .IsRequired();
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomProjectDescriptionId");
-
-                    b.HasIndex("ExerciseDescriptionId");
-
-                    b.ToTable("Assets");
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
                 {
                     b.Property<int>("Id")
@@ -448,6 +451,21 @@ namespace ClientServer.Migrations
                     b.ToTable("Templates");
                 });
 
+            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
+                {
+                    b.Property<int>("CustomTestId");
+
+                    b.Property<int>("FileReferenceUserFileAssetId");
+
+                    b.HasKey("CustomTestId", "FileReferenceUserFileAssetId");
+
+                    b.HasIndex("CustomTestId");
+
+                    b.HasIndex("FileReferenceUserFileAssetId");
+
+                    b.ToTable("CustomTestWithFileAsAssetReferences");
+                });
+
             modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
                 {
                     b.Property<int>("Id")
@@ -460,7 +478,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsOnlyVisibleToOwner");
 
@@ -469,10 +487,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserGroupId");
 
@@ -493,7 +511,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -533,8 +551,6 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("ExerciseId");
 
-                    b.Property<int?>("ExerciseId1");
-
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.HasKey("Id");
@@ -542,8 +558,6 @@ namespace ClientServer.Migrations
                     b.HasIndex("ExerciseId")
                         .IsUnique();
 
-                    b.HasIndex("ExerciseId1");
-
                     b.ToTable("MetaDatas");
                 });
 
@@ -564,7 +578,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("GeneratedCode")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("HadAutomaticAssessmentErrors");
 
@@ -591,7 +605,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("MaxManualPoint");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("PLangId");
 
@@ -631,6 +645,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("SolutionPLangId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -644,15 +662,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -709,14 +727,14 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<int?>("MainFileId");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
 
@@ -739,10 +757,10 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<int?>("ManualPoints");
 
@@ -753,7 +771,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("NormalTestPoints");
 
                     b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int?>("SubmitTestPoints");
 
@@ -768,14 +786,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -808,6 +826,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("SolutionPLangId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -821,15 +843,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -854,19 +876,19 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Description")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -906,14 +928,14 @@ namespace ClientServer.Migrations
                         .IsRequired();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsContentVisibleForUser");
 
@@ -934,14 +956,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseReleaseId");
 
@@ -960,36 +982,6 @@ namespace ClientServer.Migrations
                     b.ToTable("CustomTest");
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<int?>("CustomTestId")
-                        .IsRequired();
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("CustomTestId");
-
-                    b.ToTable("CustomTestAssets");
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
                 {
                     b.Property<int>("Id")
@@ -997,6 +989,9 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CompileTimeoutInMs");
 
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(2000);
+
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("ExerciseId");
@@ -1023,14 +1018,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseId");
 
@@ -1056,36 +1051,6 @@ namespace ClientServer.Migrations
                     b.ToTable("Tests");
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd();
-
-                    b.Property<byte[]>("Content");
-
-                    b.Property<DateTime>("CreatedAt");
-
-                    b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("Hash")
-                        .HasMaxLength(500);
-
-                    b.Property<DateTime>("LastUpdatedAt");
-
-                    b.Property<string>("MimeType")
-                        .HasMaxLength(500);
-
-                    b.Property<int?>("TestId")
-                        .IsRequired();
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("TestId");
-
-                    b.ToTable("TestAssets");
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestSettings", b =>
                 {
                     b.Property<int>("Id")
@@ -1093,6 +1058,9 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CompileTimeoutInMs");
 
+                    b.Property<string>("CompilerOptions")
+                        .HasMaxLength(2000);
+
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<DateTime>("LastUpdatedAt");
@@ -1116,10 +1084,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1151,18 +1119,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1179,18 +1144,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
-
-                    b.Property<string>("RelativePath")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1199,6 +1161,31 @@ namespace ClientServer.Migrations
                     b.ToTable("FileReferenceTestAssets");
                 });
 
+            modelBuilder.Entity("ClientServer.Models.Files.FileReferenceUserFileAsset", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd();
+
+                    b.Property<DateTime>("CreatedAt");
+
+                    b.Property<string>("Hash")
+                        .HasMaxLength(2000);
+
+                    b.Property<DateTime>("LastUpdatedAt");
+
+                    b.Property<string>("MimeType")
+                        .HasMaxLength(2000);
+
+                    b.Property<string>("OriginalName")
+                        .HasMaxLength(2000);
+
+                    b.Property<long>("SizeInBytes");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileReferenceUserFileAssets");
+                });
+
             modelBuilder.Entity("ClientServer.Models.Lang", b =>
                 {
                     b.Property<int>("Id")
@@ -1207,10 +1194,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Language")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1227,16 +1214,16 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1252,17 +1239,17 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("ExpirationDateTime");
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("UserId");
 
@@ -1283,13 +1270,13 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1297,7 +1284,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserId");
 
@@ -1320,7 +1307,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("GroupRolePermissionId");
 
@@ -1355,7 +1342,7 @@ namespace ClientServer.Migrations
 
                     b.Property<bool>("CanLockExercisesPermanently");
 
-                    b.Property<bool>("CanReleaseExercises");
+                    b.Property<bool>("CanManageExerciseReleases");
 
                     b.Property<bool>("CanRemoveMemberFromGroup");
 
@@ -1394,7 +1381,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("TabSize");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("UseWrapping");
 
@@ -1417,7 +1404,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("UserId");
 
@@ -1442,10 +1429,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1505,7 +1492,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("CustomProjectTestCompileTimeoutInMs");
 
@@ -1542,18 +1529,18 @@ namespace ClientServer.Migrations
                     b.Property<int>("SubmitTestServerTimeoutInMs");
 
                     b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("TestServerTimeoutInMs");
 
                     b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1577,28 +1564,28 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsActivated");
 
                     b.Property<DateTime>("LastLoginAt");
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Password")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("SystemRoleId");
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1618,10 +1605,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1669,6 +1656,19 @@ namespace ClientServer.Migrations
                         .OnDelete(DeleteBehavior.Cascade);
                 });
 
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectDescriptionWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription", "CustomProjectDescription")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("CustomProjectDescriptionId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomProjectDescriptionWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
             modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectSolution", b =>
                 {
                     b.HasOne("ClientServer.Models.CustomProjects.CustomProject", "CustomProject")
@@ -1713,12 +1713,17 @@ namespace ClientServer.Migrations
                         .OnDelete(DeleteBehavior.Cascade);
                 });
 
-            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestAsset", b =>
+            modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithFileAsAssetReference", b =>
                 {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest")
-                        .WithMany("TestAssets")
+                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectTest", "CustomProjectTest")
+                        .WithMany("AssetReferences")
                         .HasForeignKey("CustomProjectTestId")
                         .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomProjectTestWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
                 });
 
             modelBuilder.Entity("ClientServer.Models.CustomProjects.CustomProjectTestWithSolutionAsTestResult", b =>
@@ -1785,18 +1790,6 @@ namespace ClientServer.Migrations
                         .OnDelete(DeleteBehavior.Cascade);
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Asset", b =>
-                {
-                    b.HasOne("ClientServer.Models.CustomProjects.CustomProjectDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("CustomProjectDescriptionId");
-
-                    b.HasOne("ClientServer.Models.Exercises.ExerciseDescription")
-                        .WithMany("Assets")
-                        .HasForeignKey("ExerciseDescriptionId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.CodeTemplate", b =>
                 {
                     b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
@@ -1814,6 +1807,19 @@ namespace ClientServer.Migrations
                         .HasForeignKey("PLangId");
                 });
 
+            modelBuilder.Entity("ClientServer.Models.Exercises.CustomTestWithFileAsAssetReference", b =>
+                {
+                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest", "CustomTest")
+                        .WithMany("AssetReferences")
+                        .HasForeignKey("CustomTestId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.HasOne("ClientServer.Models.Files.FileReferenceUserFileAsset", "FileReferenceUserFileAsset")
+                        .WithMany("CustomTestWithFileAsAssetReferences")
+                        .HasForeignKey("FileReferenceUserFileAssetId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
             modelBuilder.Entity("ClientServer.Models.Exercises.Exercise", b =>
                 {
                     b.HasOne("ClientServer.Models.Users.UserGroup", "UserGroup")
@@ -1850,14 +1856,10 @@ namespace ClientServer.Migrations
 
             modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
                 {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
                         .WithOne("MetaData")
                         .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
                         .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
                 });
 
             modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
@@ -1984,14 +1986,6 @@ namespace ClientServer.Migrations
                         .OnDelete(DeleteBehavior.Cascade);
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.CustomTestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.CustomTest")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("CustomTestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.Tests.DefaultCustomTestSettings", b =>
                 {
                     b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
@@ -2017,14 +2011,6 @@ namespace ClientServer.Migrations
                         .HasForeignKey("TestTypeId");
                 });
 
-            modelBuilder.Entity("ClientServer.Models.Exercises.Tests.TestAsset", b =>
-                {
-                    b.HasOne("ClientServer.Models.Exercises.Tests.Test")
-                        .WithMany("TestAssets")
-                        .HasForeignKey("TestId")
-                        .OnDelete(DeleteBehavior.Cascade);
-                });
-
             modelBuilder.Entity("ClientServer.Models.Exercises.TestWithFileAsAssetReference", b =>
                 {
                     b.HasOne("ClientServer.Models.Files.FileReferenceTestAsset", "FileReferenceTestAsset")
diff --git a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.cs b/src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.cs
similarity index 52%
rename from src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.cs
rename to src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.cs
index 7a69425..0cfbe91 100755
--- a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.cs
+++ b/src/ClientServer/Migrations/20190729133239_addTestResultCharacterLimit.cs
@@ -4,81 +4,74 @@ using Microsoft.EntityFrameworkCore.Migrations;
 
 namespace ClientServer.Migrations
 {
-    public partial class MoreTestLimitsAndCompilerTimeout : Migration
+    public partial class addTestResultCharacterLimit : Migration
     {
         protected override void Up(MigrationBuilder migrationBuilder)
         {
-            migrationBuilder.AddColumn<int>(
-                name: "CustomProjectTestCompileTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 2000);
-
-            migrationBuilder.AddColumn<int>(
-                name: "JustRunProgramCompileTimeoutInMs",
-                table: "SystemSettings",
-                nullable: false,
-                defaultValue: 2000);
+            migrationBuilder.DropForeignKey(
+                name: "FK_MetaDatas_Exercises_ExerciseId1",
+                table: "MetaDatas");
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMs",
-                table: "TestCaseSettingses",
-                nullable: false,
-                defaultValue: 2000);
+            migrationBuilder.DropIndex(
+                name: "IX_MetaDatas_ExerciseId1",
+                table: "MetaDatas");
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMs",
-                table: "DefaultCustomTestSettings",
-                nullable: false,
-                defaultValue: 2000);
+            migrationBuilder.DropColumn(
+                name: "ExerciseId1",
+                table: "MetaDatas");
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMsUsed",
+            migrationBuilder.AddColumn<bool>(
+                name: "CharacterLimitExceeded",
                 table: "TestWithSingleSolutionAsTestResult",
-                nullable: true);
+                nullable: false,
+                defaultValue: false);
 
             migrationBuilder.AddColumn<int>(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "TestWithSingleSolutionAsTestResult",
                 nullable: true);
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMsUsed",
+            migrationBuilder.AddColumn<bool>(
+                name: "CharacterLimitExceeded",
                 table: "CustomTestWithSingleSolutionAsTestResult",
-                nullable: true);
+                nullable: false,
+                defaultValue: false);
 
             migrationBuilder.AddColumn<int>(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomTestWithSingleSolutionAsTestResult",
                 nullable: true);
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMsUsed",
+            migrationBuilder.AddColumn<bool>(
+                name: "CharacterLimitExceeded",
                 table: "TestWithAfterSolutionAsTestResults",
-                nullable: true);
+                nullable: false,
+                defaultValue: false);
 
             migrationBuilder.AddColumn<int>(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "TestWithAfterSolutionAsTestResults",
                 nullable: true);
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMsUsed",
+            migrationBuilder.AddColumn<bool>(
+                name: "CharacterLimitExceeded",
                 table: "CustomTestWithAfterSolutionAsTestResults",
-                nullable: true);
+                nullable: false,
+                defaultValue: false);
 
             migrationBuilder.AddColumn<int>(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomTestWithAfterSolutionAsTestResults",
                 nullable: true);
 
-            migrationBuilder.AddColumn<int>(
-                name: "CompileTimeoutInMsUsed",
+            migrationBuilder.AddColumn<bool>(
+                name: "CharacterLimitExceeded",
                 table: "CustomProjectTestWithSolutionAsTestResults",
-                nullable: true);
+                nullable: false,
+                defaultValue: false);
 
             migrationBuilder.AddColumn<int>(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomProjectTestWithSolutionAsTestResults",
                 nullable: true);
         }
@@ -86,60 +79,62 @@ namespace ClientServer.Migrations
         protected override void Down(MigrationBuilder migrationBuilder)
         {
             migrationBuilder.DropColumn(
-                name: "CustomProjectTestCompileTimeoutInMs",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "JustRunProgramCompileTimeoutInMs",
-                table: "SystemSettings");
-
-            migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMs",
-                table: "TestCaseSettingses");
-
-            migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMs",
-                table: "DefaultCustomTestSettings");
-
-            migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMsUsed",
+                name: "CharacterLimitExceeded",
                 table: "TestWithSingleSolutionAsTestResult");
 
             migrationBuilder.DropColumn(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "TestWithSingleSolutionAsTestResult");
 
             migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMsUsed",
+                name: "CharacterLimitExceeded",
                 table: "CustomTestWithSingleSolutionAsTestResult");
 
             migrationBuilder.DropColumn(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomTestWithSingleSolutionAsTestResult");
 
             migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMsUsed",
+                name: "CharacterLimitExceeded",
                 table: "TestWithAfterSolutionAsTestResults");
 
             migrationBuilder.DropColumn(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "TestWithAfterSolutionAsTestResults");
 
             migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMsUsed",
+                name: "CharacterLimitExceeded",
                 table: "CustomTestWithAfterSolutionAsTestResults");
 
             migrationBuilder.DropColumn(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomTestWithAfterSolutionAsTestResults");
 
             migrationBuilder.DropColumn(
-                name: "CompileTimeoutInMsUsed",
+                name: "CharacterLimitExceeded",
                 table: "CustomProjectTestWithSolutionAsTestResults");
 
             migrationBuilder.DropColumn(
-                name: "TimeoutInMsUsed",
+                name: "CharacterLimitUsed",
                 table: "CustomProjectTestWithSolutionAsTestResults");
+
+            migrationBuilder.AddColumn<int>(
+                name: "ExerciseId1",
+                table: "MetaDatas",
+                nullable: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_MetaDatas_ExerciseId1",
+                table: "MetaDatas",
+                column: "ExerciseId1");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_MetaDatas_Exercises_ExerciseId1",
+                table: "MetaDatas",
+                column: "ExerciseId1",
+                principalTable: "Exercises",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Restrict);
         }
     }
 }
diff --git a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs b/src/ClientServer/Migrations/YapexDbContextModelSnapshot.cs
old mode 100644
new mode 100755
similarity index 93%
rename from src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
rename to src/ClientServer/Migrations/YapexDbContextModelSnapshot.cs
index 72787d5..fee1131
--- a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
+++ b/src/ClientServer/Migrations/YapexDbContextModelSnapshot.cs
@@ -9,7 +9,7 @@ using ClientServer.Models.Exercises.Release;
 namespace ClientServer.Migrations
 {
     [DbContext(typeof(YapexDbContext))]
-    partial class SyndromDbContextModelSnapshot : ModelSnapshot
+    partial class YapexDbContextModelSnapshot : ModelSnapshot
     {
         protected override void BuildModel(ModelBuilder modelBuilder)
         {
@@ -34,7 +34,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("LastEditorPLangId");
 
@@ -55,7 +55,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -119,7 +119,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -129,7 +129,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -148,7 +148,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -157,7 +157,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -189,15 +189,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -225,6 +225,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("CustomProjectTestId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -238,15 +242,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -299,14 +303,14 @@ namespace ClientServer.Migrations
                     b.Property<int>("AfterSolutionId");
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -329,6 +333,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("AfterSolutionId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -342,15 +350,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -373,6 +381,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("AfterSolutionId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -386,15 +398,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -465,7 +477,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsOnlyVisibleToOwner");
 
@@ -474,10 +486,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("ShortDescription")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserGroupId");
 
@@ -498,7 +510,7 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(50000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -538,8 +550,6 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("ExerciseId");
 
-                    b.Property<int?>("ExerciseId1");
-
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.HasKey("Id");
@@ -547,8 +557,6 @@ namespace ClientServer.Migrations
                     b.HasIndex("ExerciseId")
                         .IsUnique();
 
-                    b.HasIndex("ExerciseId1");
-
                     b.ToTable("MetaDatas");
                 });
 
@@ -569,7 +577,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("GeneratedCode")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("HadAutomaticAssessmentErrors");
 
@@ -596,7 +604,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("MaxManualPoint");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("PLangId");
 
@@ -636,6 +644,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("SolutionPLangId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -649,15 +661,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -714,14 +726,14 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LastEditingIpAddress")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<int?>("MainFileId");
 
                     b.Property<string>("Note")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.HasKey("UserId", "ExerciseReleaseId", "PLangId");
 
@@ -744,10 +756,10 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("FeedbackForStudent")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<string>("LastAssessmentErrorMessage")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<int?>("ManualPoints");
 
@@ -758,7 +770,7 @@ namespace ClientServer.Migrations
                     b.Property<int?>("NormalTestPoints");
 
                     b.Property<string>("NoteForOtherTutors")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int?>("SubmitTestPoints");
 
@@ -773,14 +785,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsDisplayed");
 
@@ -813,6 +825,10 @@ namespace ClientServer.Migrations
 
                     b.Property<int>("SolutionPLangId");
 
+                    b.Property<bool>("CharacterLimitExceeded");
+
+                    b.Property<int?>("CharacterLimitUsed");
+
                     b.Property<int?>("CompileTimeoutInMsUsed");
 
                     b.Property<DateTime>("CreatedAt");
@@ -826,15 +842,15 @@ namespace ClientServer.Migrations
                     b.Property<int?>("ProgramExitCode");
 
                     b.Property<string>("Protocol")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(160100);
 
                     b.Property<string>("RunnerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TestResultCode");
 
                     b.Property<string>("TestServerVersion")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("TimeForCompiling");
 
@@ -859,19 +875,19 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Description")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlBackgroundColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlColor")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("HtmlIcon")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -911,14 +927,14 @@ namespace ClientServer.Migrations
                         .IsRequired();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(10000);
+                        .HasMaxLength(70000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("FileNameWithExtension")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsContentVisibleForUser");
 
@@ -939,14 +955,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseReleaseId");
 
@@ -973,7 +989,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("CompileTimeoutInMs");
 
                     b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -1001,14 +1017,14 @@ namespace ClientServer.Migrations
                         .ValueGeneratedOnAdd();
 
                     b.Property<string>("Content")
-                        .HasMaxLength(5000);
+                        .HasMaxLength(80000);
 
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<int>("DisplayIndex");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("ExerciseId");
 
@@ -1042,7 +1058,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("CompileTimeoutInMs");
 
                     b.Property<string>("CompilerOptions")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("CreatedAt");
 
@@ -1067,10 +1083,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1102,15 +1118,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1127,15 +1143,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1152,15 +1168,15 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Hash")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("MimeType")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("OriginalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<long>("SizeInBytes");
 
@@ -1177,10 +1193,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("LangShortcut")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Language")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1197,16 +1213,16 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("EditorHighlightModeName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FileExtensionsWithDot")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("InternalName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1222,17 +1238,17 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CsrfToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("ExpirationDateTime");
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("RandomSecret")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("UserAuthToken")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("UserId");
 
@@ -1253,13 +1269,13 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1267,7 +1283,7 @@ namespace ClientServer.Migrations
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("UserId");
 
@@ -1290,7 +1306,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("GroupRolePermissionId");
 
@@ -1364,7 +1380,7 @@ namespace ClientServer.Migrations
                     b.Property<int>("TabSize");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("UseWrapping");
 
@@ -1387,7 +1403,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Theme")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("UserId");
 
@@ -1412,10 +1428,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1475,7 +1491,7 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("CurrentServerMessage")
-                        .HasMaxLength(1000);
+                        .HasMaxLength(10000);
 
                     b.Property<int>("CustomProjectTestCompileTimeoutInMs");
 
@@ -1512,18 +1528,18 @@ namespace ClientServer.Migrations
                     b.Property<int>("SubmitTestServerTimeoutInMs");
 
                     b.Property<string>("SubmitTestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerConfigUiUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("TestServerStatsUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int>("TestServerTimeoutInMs");
 
                     b.Property<string>("TestServerUrl")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1547,28 +1563,28 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("FirstName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<bool>("IsActivated");
 
                     b.Property<DateTime>("LastLoginAt");
 
                     b.Property<string>("LastName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
                     b.Property<string>("Password")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<int?>("SystemRoleId");
 
                     b.Property<string>("Token")
                         .IsRequired()
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.HasKey("Id");
 
@@ -1588,10 +1604,10 @@ namespace ClientServer.Migrations
                     b.Property<DateTime>("CreatedAt");
 
                     b.Property<string>("DisplayName")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<string>("Email")
-                        .HasMaxLength(500);
+                        .HasMaxLength(2000);
 
                     b.Property<DateTime>("LastUpdatedAt");
 
@@ -1839,14 +1855,10 @@ namespace ClientServer.Migrations
 
             modelBuilder.Entity("ClientServer.Models.Exercises.MetaData", b =>
                 {
-                    b.HasOne("ClientServer.Models.Exercises.Exercise")
+                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
                         .WithOne("MetaData")
                         .HasForeignKey("ClientServer.Models.Exercises.MetaData", "ExerciseId")
                         .OnDelete(DeleteBehavior.Cascade);
-
-                    b.HasOne("ClientServer.Models.Exercises.Exercise", "Exercise")
-                        .WithMany()
-                        .HasForeignKey("ExerciseId1");
                 });
 
             modelBuilder.Entity("ClientServer.Models.Exercises.Release.ExerciseRelease", b =>
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs b/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
index 9454b84..7e4fa7a 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
@@ -78,5 +78,16 @@ namespace ClientServer.Models.CustomProjects
         /// </summary>
         [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
index 099890c..aba9c74 100644
--- a/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
@@ -84,5 +84,16 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// </summary>
         [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
index cbf5dfb..fae4b2b 100644
--- a/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
@@ -86,5 +86,16 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// </summary>
         [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
index 28be011..089f479 100644
--- a/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
@@ -94,6 +94,17 @@ namespace ClientServer.Models.Exercises.Solution
         /// </summary>
         [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
+        
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
 
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
index 64b35e8..3e1d5c1 100644
--- a/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
@@ -96,5 +96,16 @@ namespace ClientServer.Models.Exercises.Solution
         /// </summary>
         [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
+
+        /// <summary>
+        /// true: the limit <see cref="YapexDbContext.TestProtocolMaxStringLength"/> was exceeded and
+        /// the <see cref="Protocol"/> was cut
+        /// </summary>
+        public bool CharacterLimitExceeded { get; set; }
+        /// <summary>
+        /// the db will only store a max of characters <see cref="YapexDbContext.TestProtocolMaxStringLength"/>
+        /// can be null for old results
+        /// </summary>
+        public int? CharacterLimitUsed { get; set; }
     }
 }
-- 
GitLab