From e10b2e7b0ff9d794859f95d072cf0f94f568a393 Mon Sep 17 00:00:00 2001 From: PrayatOsm Date: Fri, 17 Nov 2023 19:23:57 +0530 Subject: [PATCH 1/2] REST-243: Rename files of trainingPegasus to DotnetBoilerPlate --- .gitignore | 9 +- .vscode/extensions.json | 10 + .vscode/launch.json | 33 + .vscode/tasks.json | 41 + DotnetBoilerPlate/.editorconfig | 398 ++++ .../BLL/Interfaces/IUsersBLL.cs | 12 + .../DotnetBoilerPlate.API/BLL/UsersBLL.cs | 99 + .../Controllers/UsersController.cs | 49 + .../DotnetBoilerPlate.API.csproj | 35 + .../Helpers/AutoMappingProfile.cs | 8 + .../Helpers/EnumHelper.cs | 15 + .../Models/BaseResponse.cs | 42 + .../DotnetBoilerPlate.API/Program.cs | 155 ++ .../Properties/launchSettings.json | 31 + .../appsettings.Development.json | 8 + .../DotnetBoilerPlate.API/appsettings.json | 19 + .../DatabaseContext/SqlDatabaseContext.cs | 1897 +++++++++++++++++ .../DotnetBoilerPlate.DAL.csproj | 28 + .../Models/CandidateExamsDBO.cs | 35 + .../Models/CompaniesDBO.cs | 63 + .../Models/CoursebatchesDBO.cs | 62 + .../Models/ExamsConfigDBO.cs | 27 + .../DotnetBoilerPlate.DAL/Models/ExamsDBO.cs | 90 + .../Models/GetCandidateExamsDBO.cs | 141 ++ .../DotnetBoilerPlate.DAL/Models/GroupsDBO.cs | 34 + .../DotnetBoilerPlate.DAL/Models/LogsDBO.cs | 31 + .../Models/MarkDetailsDBO.cs | 38 + .../DotnetBoilerPlate.DAL/Models/MarksDBO.cs | 61 + .../Models/OnlineExamQuestionPapersDBO.cs | 94 + .../Models/OnlineExamSubmittedAnswersDBO.cs | 34 + .../Models/PrintDetailsDBO.cs | 33 + .../Models/QualificationsDBO.cs | 97 + .../Models/QuestiondetailsDBO.cs | 45 + .../Models/QuestionsDBO.cs | 74 + .../Models/SectionsDBO.cs | 25 + .../Models/ServicesDBO.cs | 78 + .../Models/StudentdetailsDBO.cs | 44 + .../Models/SubscribedTrainingsDBO.cs | 44 + .../Models/SubsectionsDBO.cs | 25 + .../Models/TestUserRegistrationdetailsDBO.cs | 10 + .../Models/ThemeTemplatesDBO.cs | 23 + .../Models/TrainingprovidersDBO.cs | 19 + .../DotnetBoilerPlate.DAL/Models/UsersDBO.cs | 122 ++ .../Repositories/Interfaces/IUsersRepo.cs | 10 + .../Repositories/UsersRepo.cs | 25 + DotnetBoilerPlate/DotnetBoilerPlate.sln | 36 + docs/img/dotnet-run.png | Bin 0 -> 33605 bytes docs/img/extensions.png | Bin 0 -> 60447 bytes 48 files changed, 4308 insertions(+), 1 deletion(-) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 DotnetBoilerPlate/.editorconfig create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs create mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.sln create mode 100644 docs/img/dotnet-run.png create mode 100644 docs/img/extensions.png diff --git a/.gitignore b/.gitignore index 8a30d25..c0a53e9 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,7 @@ bld/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory -.vs/ +DotnetBoilerPlate/.vs # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ @@ -396,3 +396,10 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml + +# Build Results +**/bin +**/obj + +# Log Files +**/logs \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..d48b106 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "kreativ-software.csharpextensions", + "jmrog.vscode-nuget-package-manager", + "fudge.auto-using", + "formulahendry.dotnet", + "pkief.material-icon-theme", + "patcx.vscode-nuget-gallery" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5426b0a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (web)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/DotnetBoilerPlate/DotnetBoilerPlate.API/bin/Debug/net6.0/DotnetBoilerPlate.API.dll", + "args": [], + "cwd": "${workspaceFolder}/DotnetBoilerPlate/DotnetBoilerPlate.API", + "stopAtEntry": false, + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/Views" + } + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..5b41ab9 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/DotnetBoilerPlate/DotnetBoilerPlate.sln", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/DotnetBoilerPlate/DotnetBoilerPlate.sln", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/DotnetBoilerPlate/DotnetBoilerPlate.sln" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/DotnetBoilerPlate/.editorconfig b/DotnetBoilerPlate/.editorconfig new file mode 100644 index 0000000..ef258be --- /dev/null +++ b/DotnetBoilerPlate/.editorconfig @@ -0,0 +1,398 @@ +root = true + +# All Files +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true +csharp_indent_labels = one_less_than_current +csharp_using_directive_placement = outside_namespace:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:warning +csharp_style_namespace_declarations = block_scoped:warning +csharp_style_prefer_method_group_conversion = true:suggestion +csharp_style_prefer_top_level_statements = true:silent +csharp_style_expression_bodied_methods = true:none +csharp_style_expression_bodied_constructors = true:warning +csharp_style_expression_bodied_operators = true:warning +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = true:warning +csharp_style_throw_expression = true:warning +csharp_style_prefer_null_check_over_type_check = true:warning +csharp_prefer_simple_default_expression = true:warning +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:warning +csharp_style_prefer_range_operator = true:warning +csharp_style_implicit_object_creation_when_type_is_apparent = false:warning +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_inlined_variable_declaration = true:warning +csharp_style_deconstructed_variable_declaration = true:warning +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent +csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion +csharp_prefer_static_local_function = true:warning +csharp_style_prefer_readonly_struct = true:suggestion +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_conditional_delegate_call = true:warning +csharp_style_prefer_switch_expression = true:warning +csharp_style_prefer_pattern_matching = true:silent +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_var_for_built_in_types = false:error +csharp_style_var_when_type_is_apparent = false:error +csharp_style_var_elsewhere = false:error +csharp_space_between_parentheses = expressions +csharp_preserve_single_line_statements = true +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_prefer_readonly_struct_member = true:suggestion +csharp_space_around_binary_operators = before_and_after + +########################################## +# File Extension Settings +########################################## + +# Visual Studio Solution Files +[*.sln] +indent_style = tab + +# Visual Studio XML Project Files +[*.{csproj,vbproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# XML Configuration Files +[*.{xml,config,props,targets,nuspec,resx,ruleset,vsixmanifest,vsct}] +indent_size = 2 + +# JSON Files +[*.{json,json5,webmanifest}] +indent_size = 2 + +# YAML Files +[*.{yml,yaml}] +indent_size = 2 + +# Markdown Files +[*.{md,mdx}] +trim_trailing_whitespace = false + +# Web Files +[*.{htm,html,js,jsm,ts,tsx,cjs,cts,ctsx,mjs,mts,mtsx,css,sass,scss,less,pcss,svg,vue}] +indent_size = 2 + +# Batch Files +[*.{cmd,bat}] +end_of_line = crlf + +# Bash Files +[*.sh] +end_of_line = lf + +# Makefiles +[Makefile] +indent_style = tab + +########################################## +# Default .NET Code Style Severities +########################################## + +[*.{cs,csx,cake,vb,vbx}] +# Default Severity for all .NET Code Style rules below +dotnet_analyzer_diagnostic.severity = warning + +########################################## +# Language Rules +########################################## + +# .NET Style Rules +[*.{cs,csx,cake,vb,vbx}] +# "this." and "Me." qualifiers +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_qualification_for_event = false:warning +# Language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent +# Modifier preferences +dotnet_style_require_accessibility_modifiers = always:warning +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:warning +visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:warning +dotnet_style_readonly_field = true:suggestion +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +# Expression-level preferences +dotnet_style_object_initializer = true:silent +dotnet_style_collection_initializer = true:silent +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_prefer_inferred_tuple_names = false:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = false:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_diagnostic.IDE0045.severity = suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_diagnostic.IDE0046.severity = suggestion +dotnet_style_prefer_compound_assignment = true:silent +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +# Null-checking preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning + +dotnet_style_operator_placement_when_wrapping = end_of_line +csharp_style_prefer_null_check_over_type_check = true:warning + +# C# Style Rules +[*.{cs,csx,cake}] +# Expression-bodied members +csharp_style_expression_bodied_methods = true:none +csharp_style_expression_bodied_constructors = true:warning +csharp_style_expression_bodied_operators = true:warning +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_lambdas = false:disabled +csharp_style_expression_bodied_local_functions = true:warning +# Pattern matching preferences +csharp_style_pattern_matching_over_is_with_cast_check = true:disabled +csharp_style_pattern_matching_over_as_with_null_check = true:disabled +csharp_style_prefer_switch_expression = true:warning +csharp_style_prefer_pattern_matching = true:disabled +csharp_style_prefer_not_pattern = true:disabled +# Expression-level preferences +csharp_style_inlined_variable_declaration = true:warning +csharp_prefer_simple_default_expression = true:warning +csharp_style_pattern_local_over_anonymous_function = true:warning +csharp_style_deconstructed_variable_declaration = true:warning +csharp_style_prefer_index_operator = true:warning +csharp_style_prefer_range_operator = true:warning +csharp_style_implicit_object_creation_when_type_is_apparent = false:warning +# "Null" checking preferences +csharp_style_throw_expression = true:warning +csharp_style_conditional_delegate_call = true:warning +# Code block preferences +csharp_prefer_braces = true:warning +csharp_prefer_simple_using_statement = true:suggestion +dotnet_diagnostic.IDE0063.severity = suggestion +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:silent +# Modifier preferences +csharp_prefer_static_local_function = true:warning + +########################################## +# Unnecessary Code Rules +########################################## + +# .NET Unnecessary code rules +[*.{cs,csx,cake,vb,vbx}] +dotnet_code_quality_unused_parameters = non_public:error +dotnet_remove_unnecessary_suppression_exclusions = none:warning + +# C# Unnecessary code rules +[*.{cs,csx,cake}] +csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion +dotnet_diagnostic.IDE0058.severity = none +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +dotnet_diagnostic.IDE0059.severity = suggestion + +########################################## +# Formatting Rules +########################################## + +# .NET formatting rules +[*.{cs,csx,cake,vb,vbx}] +# Organize using directives +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false +# Dotnet namespace options +dotnet_style_namespace_match_folder = true:suggestion +dotnet_diagnostic.IDE0130.severity = suggestion + +# C# formatting rules +[*.{cs,csx,cake}] +# Newline options +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true +# Indentation options +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents_when_block = false +# Spacing options +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_after_comma = true +csharp_space_before_comma = false +csharp_space_after_dot = false +csharp_space_before_dot = false +csharp_space_after_semicolon_in_for_statement = true +csharp_space_before_semicolon_in_for_statement = false +csharp_space_around_declaration_statements = false +csharp_space_before_open_square_brackets = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_square_brackets = false +# Wrap options +csharp_preserve_single_line_statements = false +csharp_preserve_single_line_blocks = true +# Namespace options +csharp_style_namespace_declarations = block_scoped:warning + +########################################## +# .NET Naming Rules +########################################## + +[*.{cs,vb}] + +########################################## +# Styles +########################################## + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +indent_size = 4 +end_of_line = crlf + +# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. +dotnet_diagnostic.CS8618.severity = none +dotnet_style_allow_multiple_blank_lines_experimental = true:silent +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent + +# CA2254: Template should be a static expression +dotnet_diagnostic.CA2254.severity = none + +dotnet_diagnostic.CA1848.severity = none + +# CA1305: Specify IFormatProvider +dotnet_diagnostic.CA1305.severity = none + +# CA2201: Do not raise reserved exception types +dotnet_diagnostic.CA2201.severity = none + +# CS8602: Dereference of a possibly null reference. +dotnet_diagnostic.CS8602.severity = none + +# CS8604: Possible null reference argument. +dotnet_diagnostic.CS8604.severity = none + +# CS8625: Cannot convert null literal to non-nullable reference type. +dotnet_diagnostic.CS8625.severity = none + +# CS8629: Nullable value type may be null. +dotnet_diagnostic.CS8629.severity = none + +# CS8600: Converting null literal or possible null value to non-nullable type. +dotnet_diagnostic.CS8600.severity = none + +# CA1716: Identifiers should not match keywords +dotnet_diagnostic.CA1716.severity = none + +# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. +dotnet_diagnostic.CS8618.severity = none + +dotnet_diagnostic.CS8603.severity = none + +# CA1707: Identifiers should not contain underscores +dotnet_diagnostic.CA1707.severity = none + +# IDE1006: Naming Styles +dotnet_diagnostic.IDE1006.severity = none + +# CA2211: Non-constant fields should not be visible +dotnet_diagnostic.CA2211.severity = none + +# CA1805: Do not initialize unnecessarily +dotnet_diagnostic.CA1805.severity = none + +# IDE0022: Use expression body for methods +dotnet_diagnostic.IDE0022.severity = none + +dotnet_analyzer_diagnostic.category-Performance.severity = none + +dotnet_diagnostic.CA1816.severity = none + +# CS8601: Possible null reference assignment +dotnet_diagnostic.CS8601.severity = silent + +# CS8622: Nullability of reference types in type of parameter doesn't match the target delegate (possibly because of nullability attributes) +dotnet_diagnostic.CS8622.severity = silent + +dotnet_diagnostic.CA2251.severity = error + +# CA2249: Consider using 'string.Contains' instead of 'string.IndexOf' +dotnet_diagnostic.CA2249.severity = error + +# JSON002: Probable JSON string detected +dotnet_diagnostic.JSON002.severity = none diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs new file mode 100644 index 0000000..3a4e792 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; +using DotnetBoilerPlate.API.Models; +using DotnetBoilerPlate.DAL.Models; + +namespace DotnetBoilerPlate.API.BLL.Interfaces +{ + public interface IUsersBLL + { + ActionResult>> GetAllUsers(); + ActionResult> GetUserById(string userId); + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs new file mode 100644 index 0000000..0d766fe --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs @@ -0,0 +1,99 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using DotnetBoilerPlate.API.BLL.Interfaces; +using DotnetBoilerPlate.API.Helpers; +using DotnetBoilerPlate.API.Models; +using DotnetBoilerPlate.DAL.DatabaseContext; +using DotnetBoilerPlate.DAL.Models; +using DotnetBoilerPlate.DAL.Repositories.Interfaces; + +namespace DotnetBoilerPlate.API.BLL +{ + public class UsersBLL : Controller, IUsersBLL + { + private readonly IUsersRepo _usersRepo; + private readonly ILogger _logger; + private readonly IConfiguration _configuration; + private readonly SqlDatabaseContext _databaseContext; + private readonly IMapper _mapper; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IWebHostEnvironment _hostingEnvironment; + + public UsersBLL(IUsersRepo userRepo, ILogger logger, IConfiguration configuration, SqlDatabaseContext databaseContext, IMapper mapper, IHttpContextAccessor httpContextAccessor, IWebHostEnvironment hostingEnvironment) + { + _usersRepo = userRepo; + _logger = logger; + _configuration = configuration; + _databaseContext = databaseContext; + _mapper = mapper; + _httpContextAccessor = httpContextAccessor; + _hostingEnvironment = hostingEnvironment; + } + + public ActionResult>> GetAllUsers() + { + BaseResponse> response = new BaseResponse>(ResponseStatus.Fail); + + try + { + // Get all users + response.Data = _usersRepo.GetAllUsers(); + response.Status = ResponseStatus.Success; + } + catch (BadHttpRequestException ex) + { + _logger.LogError(ex.Message); + response.Status = ResponseStatus.Error; + response.ErrorCode = EnumHelper.ConvertToEnum(ex.Message); + return BadRequest(response); + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + response.ErrorCode = ErrorCode.INTERNAL_SERVER_ERROR; + response.Status = ResponseStatus.Error; + return StatusCode(StatusCodes.Status500InternalServerError, response); + } + + return Ok(response); + } + + public ActionResult> GetUserById(string userId) + { + BaseResponse response = new BaseResponse(ResponseStatus.Fail); + + try + { + // If user id not found then return bad request + if (string.IsNullOrWhiteSpace(userId)) + { + throw new BadHttpRequestException(EnumHelper.ConvertToString(ErrorCode.USER_ID_REQUIRED)); + } + + // Get user by user id + UsersDBO user = _usersRepo.GetUserById(userId); + + // Assign user to data if found else throw bad request + response.Data = user ?? throw new BadHttpRequestException(EnumHelper.ConvertToString(ErrorCode.USER_NOT_FOUND)); + + response.Status = ResponseStatus.Success; + } + catch (BadHttpRequestException ex) + { + _logger.LogError(ex.Message); + response.Status = ResponseStatus.Error; + response.ErrorCode = EnumHelper.ConvertToEnum(ex.Message); + return BadRequest(response); + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + response.ErrorCode = ErrorCode.INTERNAL_SERVER_ERROR; + response.Status = ResponseStatus.Error; + return StatusCode(StatusCodes.Status500InternalServerError, response); + } + + return Ok(response); + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs new file mode 100644 index 0000000..97c4e4f --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.Mvc; +using DotnetBoilerPlate.API.BLL.Interfaces; +using DotnetBoilerPlate.API.Models; +using DotnetBoilerPlate.DAL.Models; + +namespace DotnetBoilerPlate.API.Controllers +{ + [EnableCors] + [ApiController] + public class UsersController : Controller + { + private readonly IUsersBLL _usersBll; + public UsersController(IUsersBLL usersBll) => _usersBll = usersBll; + + /// + /// Get All users. + /// + /// ERROR CODES: + /// INTERNAL_SERVER_ERROR + /// + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [Route("users")] + public ActionResult>> GetAllUsers() + { + return _usersBll.GetAllUsers(); + } + + /// + /// Get user by id. + /// + /// user id to fetch + /// ERROR CODES: + /// USER_ID_REQUIRED, USER_NOT_FOUND, INTERNAL_SERVER_ERROR + /// + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [Route("users/{userId}")] + public ActionResult> GetUserById(string userId) + { + return _usersBll.GetUserById(userId); + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj b/DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj new file mode 100644 index 0000000..9331e0a --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj @@ -0,0 +1,35 @@ + + + + net6.0 + enable + enable + true + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs new file mode 100644 index 0000000..7bd101d --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs @@ -0,0 +1,8 @@ +using AutoMapper; + +namespace DotnetBoilerPlate.API.Helpers +{ + public class AutoMappingProfile : Profile + { + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs new file mode 100644 index 0000000..5212376 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs @@ -0,0 +1,15 @@ +namespace DotnetBoilerPlate.API.Helpers +{ + public static class EnumHelper + { + public static string ConvertToString(Enum enumElement) + { + return Enum.GetName(enumElement.GetType(), enumElement); + } + + public static TEnumType ConvertToEnum(string enumValue) + { + return (TEnumType)Enum.Parse(typeof(TEnumType), enumValue); + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs new file mode 100644 index 0000000..05fcd64 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc; + +namespace DotnetBoilerPlate.API.Models +{ + public enum ResponseStatus + { + Success, + Fail, + Error + } + + public enum ErrorCode + { + INTERNAL_SERVER_ERROR, + USER_ID_REQUIRED, + USER_NOT_FOUND + } + + public class BaseResponse + { + public BaseResponse(ResponseStatus status) => Status = status; + public ResponseStatus? Status { get; set; } + public T? Data { get; set; } + public ErrorCode? ErrorCode { get; set; } + public string? Message { get; set; } + public string? StackTrace { get; set; } + } + + public class ModelValidationBadRequest + { + public static BadRequestObjectResult ModelValidationErrorResponse(ActionContext actionContext) + { + return new BadRequestObjectResult(actionContext.ModelState + .Where(modelError => modelError.Value.Errors.Count > 0) + .Select(modelError => new BaseResponse(ResponseStatus.Error) + { + ErrorCode = Enum.TryParse(modelError.Value.Errors.FirstOrDefault().ErrorMessage, out ErrorCode enumErrorCode) ? enumErrorCode : null, + Message = modelError.Value.Errors.FirstOrDefault().ErrorMessage + }).FirstOrDefault()); + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs b/DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs new file mode 100644 index 0000000..fdda26e --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs @@ -0,0 +1,155 @@ +using System.Reflection; +using System.Text; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi.Models; +using Serilog; +using Serilog.Events; +using Swashbuckle.AspNetCore.Filters; +using DotnetBoilerPlate.API.BLL; +using DotnetBoilerPlate.API.BLL.Interfaces; +using DotnetBoilerPlate.API.Models; +using DotnetBoilerPlate.DAL.DatabaseContext; +using DotnetBoilerPlate.DAL.Repositories; +using DotnetBoilerPlate.DAL.Repositories.Interfaces; + +WebApplicationBuilder builder = WebApplication.CreateBuilder(args); + +// Controller Services +builder.Services.AddControllers(options => +{ + options.Filters.Add(new ProducesAttribute("application/json")); +}) + .AddJsonOptions(options => + { + options.JsonSerializerOptions.PropertyNamingPolicy = null; + options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; + options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + }); + +// AutoMapper Services +builder.Services.AddAutoMapper(typeof(Program)); + +// Swagger UI Services +builder.Services.AddSwaggerGen(options => +{ + options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme + { + Description = "Standard Authorization header using the Bearer Scheme (\"bearer {token}\")", + In = ParameterLocation.Header, + Name = "Authorization", + Type = SecuritySchemeType.ApiKey + }); + + options.OperationFilter(); + + string xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; + string filePath = Path.Combine(AppContext.BaseDirectory, xmlFile); + options.IncludeXmlComments(filePath); +}); + +// CORS Services +string[] allowedCorsOrigin = builder.Configuration.GetSection("CorsPolicies:CorsOrigin").Value + .Split(new char[] { ',', ';' }) + .Select(origin => origin.Trim()) + .ToArray(); + +builder.Services.AddCors(options => +{ + options.AddDefaultPolicy(builder => + { + builder.WithOrigins(allowedCorsOrigin) + .AllowAnyHeader() + .AllowAnyMethod(); + }); +}); + +// Authentication +builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(options => + { + options.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuerSigningKey = true, + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8 + .GetBytes(builder.Configuration.GetSection("AppSettings:JWT_Token").Value)), + ValidateIssuer = false, + ValidateAudience = false, + ClockSkew = TimeSpan.Zero, + ValidateLifetime = true, + LifetimeValidator = (DateTime? notBefore, DateTime? expires, SecurityToken securityToken, TokenValidationParameters validationParameters) => + { + TokenValidationParameters clonedParameters = validationParameters.Clone(); + clonedParameters.LifetimeValidator = null; + + // If token expiry time is not null, then validate lifetime + if (expires != null) + { + Validators.ValidateLifetime(notBefore, expires, securityToken, clonedParameters); + } + + return true; + } + }; + }); + +// Configure Error Response from Model Validations +builder.Services.AddMvc().ConfigureApiBehaviorOptions(options => +{ + options.InvalidModelStateResponseFactory = actionContext => + { + return ModelValidationBadRequest.ModelValidationErrorResponse(actionContext); + }; +}); + +// Logging service Serilogs +builder.Logging.AddSerilog(); +Log.Logger = new LoggerConfiguration() + .WriteTo.File( + path: "logs/log-.txt", + outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}{NewLine}{NewLine}", + rollingInterval: RollingInterval.Day, + restrictedToMinimumLevel: LogEventLevel.Information + ).CreateLogger(); + +// DB connection Setup +builder.Services.AddDbContext(options => +{ + string connectionString = builder.Configuration.GetConnectionString("DBConnection"); + options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); +}); + +// Adding HTTP Context +builder.Services.AddHttpContextAccessor(); + +// Adding Services Scope For BLLs - Dependency Injection +builder.Services.AddScoped(); + +// Adding Services Scope For Repositories - Dependency Injection +builder.Services.AddScoped(); + +WebApplication app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseStaticFiles(); + +app.UseHttpsRedirection(); + +app.UseCors(); + +app.UseAuthentication(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json b/DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json new file mode 100644 index 0000000..ca4da32 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:34886", + "sslPort": 44388 + } + }, + "profiles": { + "DotnetBoilerPlate.API": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7030;http://localhost:5064", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json b/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json b/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json new file mode 100644 index 0000000..a6123fd --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json @@ -0,0 +1,19 @@ +{ + "AppSettings": { + "JWT_Token": "SAMPLE_JWT_TOKEN", + "Password_Salt": "SAMPLE_PASSWORD_SALT" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "DBConnection": "server=localhost;database=DotnetBoilerPlate;user=root;password=root" + }, + "CorsPolicies": { + "CorsOrigin": "http://localhost:4200" + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs new file mode 100644 index 0000000..175bfbe --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs @@ -0,0 +1,1897 @@ +using Microsoft.EntityFrameworkCore; +using DotnetBoilerPlate.DAL.Models; + +namespace DotnetBoilerPlate.DAL.DatabaseContext +{ + public partial class SqlDatabaseContext : DbContext + { + public SqlDatabaseContext() + { + } + + public SqlDatabaseContext(DbContextOptions options) + : base(options) + { + } + + public DbSet CandidateExams { get; set; } + + public DbSet Companies { get; set; } + + public DbSet CourseBatches { get; set; } + + public DbSet Exams { get; set; } + + public DbSet ExamsConfigs { get; set; } + + public DbSet GetCandidateExams { get; set; } + + public DbSet Groups { get; set; } + + public DbSet Logs { get; set; } + + public DbSet Marks { get; set; } + + public DbSet MarkDetails { get; set; } + + public DbSet OnlineExamQuestionPapers { get; set; } + + public DbSet OnlineExamSubmittedAnswers { get; set; } + + public DbSet PrintDetails { get; set; } + + public DbSet Qualifications { get; set; } + + public DbSet Questions { get; set; } + + public DbSet QuestionDetails { get; set; } + + public DbSet Sections { get; set; } + + public DbSet Services { get; set; } + + public DbSet StudentDetails { get; set; } + + public DbSet SubscribedTrainings { get; set; } + + public DbSet Subsections { get; set; } + + public DbSet TestUserRegistrationDetails { get; set; } + + public DbSet ThemeTemplates { get; set; } + + public DbSet TrainingProviders { get; set; } + + public DbSet Users { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .UseCollation("latin1_swedish_ci") + .HasCharSet("latin1"); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.CandidateExamId).HasName("PRIMARY"); + + entity + .ToTable("candidate_exam") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.UserId }, "idx_ce_tpid_userid_examid"); + + entity.Property(e => e.CandidateExamId) + .HasMaxLength(36) + .HasColumnName("candidateexamid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.ExamName) + .HasMaxLength(50) + .HasColumnName("examname"); + entity.Property(e => e.ExamUniqCode) + .HasMaxLength(20) + .HasColumnName("examuniqcode"); + entity.Property(e => e.IsVisible).HasColumnName("isvisible"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.QuestionPaperId) + .HasMaxLength(36) + .HasColumnName("questionpaperid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - Exam running, 2 - Exam Completed, 3 - Deative") + .HasColumnName("status"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + entity.Property(e => e.UserName) + .HasMaxLength(100) + .HasColumnName("username"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.CompanyId).HasName("PRIMARY"); + + entity + .ToTable("company") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.CompanyId) + .HasMaxLength(36) + .HasColumnName("companyid"); + entity.Property(e => e.Comments) + .HasMaxLength(500) + .HasColumnName("comments"); + entity.Property(e => e.CompanyAddress) + .HasMaxLength(100) + .HasColumnName("companyaddress"); + entity.Property(e => e.CompanyLogo) + .HasMaxLength(100) + .HasComment("Path of company Logo") + .HasColumnName("companylogo"); + entity.Property(e => e.CompanyName) + .HasMaxLength(500) + .HasColumnName("companyname"); + entity.Property(e => e.CompanyType) + .HasComment("0-Training center, 1=Campus Placement, 2-for main question bank") + .HasColumnName("companytype"); + entity.Property(e => e.CompanyUrl) + .HasMaxLength(100) + .HasColumnName("companyurl"); + entity.Property(e => e.ContactName) + .HasMaxLength(100) + .HasColumnName("contactname"); + entity.Property(e => e.ContactNumber) + .HasMaxLength(20) + .HasColumnName("contactnumber"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ExamDate).HasDefaultValueSql("'2015-11-08'"); + entity.Property(e => e.ExamTime) + .HasDefaultValueSql("'09:30:00'") + .HasColumnType("time"); + entity.Property(e => e.Facebook) + .HasMaxLength(50) + .HasColumnName("facebook"); + entity.Property(e => e.IsShareDb) + .HasDefaultValueSql("'0'") + .HasComment("0 - Don't share db, 1 - share db") + .HasColumnName("IsShareDB"); + entity.Property(e => e.LinkedIn) + .HasMaxLength(50) + .HasColumnName("linkedin"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.ThemeId) + .HasDefaultValueSql("'0'") + .HasComment("references themetemplates.themetemplateid") + .HasColumnName("themeid"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UniqueCode) + .HasMaxLength(15) + .HasColumnName("uniquecode"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.CourseBatchId).HasName("PRIMARY"); + + entity + .ToTable("coursebatch") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => e.CourseId, "FK_coursebatch"); + + entity.Property(e => e.CourseBatchId) + .HasMaxLength(36) + .HasColumnName("coursebatchid"); + entity.Property(e => e.Amount).HasColumnName("amount"); + entity.Property(e => e.ClassHours).HasColumnName("classhours"); + entity.Property(e => e.Coordinator) + .HasMaxLength(36) + .HasComment("employeeid") + .HasColumnName("coordinator"); + entity.Property(e => e.CourseId) + .HasMaxLength(36) + .HasColumnName("courseid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.Duration).HasColumnName("duration"); + entity.Property(e => e.EndDate) + .HasColumnType("datetime") + .HasColumnName("enddate"); + entity.Property(e => e.LabHours).HasColumnName("labhours"); + entity.Property(e => e.MaxNumber).HasColumnName("maxnumber"); + entity.Property(e => e.MinNumber).HasColumnName("minnumber"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Name) + .HasMaxLength(200) + .HasColumnName("name"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.StartDate) + .HasColumnType("datetime") + .HasColumnName("startdate"); + entity.Property(e => e.StartTime) + .HasMaxLength(8) + .HasColumnName("starttime"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TrainingBranch) + .HasMaxLength(100) + .HasColumnName("trainingbranch"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.ExamId).HasName("PRIMARY"); + + entity + .ToTable("exams") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => e.BatchId, "FK_exams"); + + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.BatchId) + .HasMaxLength(36) + .HasColumnName("batchid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ExamDate).HasColumnName("examdate"); + entity.Property(e => e.ExamDuration) + .HasMaxLength(10) + .HasDefaultValueSql("'0'") + .HasColumnName("examduration"); + entity.Property(e => e.ExamName) + .HasMaxLength(100) + .HasColumnName("examname"); + entity.Property(e => e.ExamTime) + .HasColumnType("time") + .HasColumnName("examtime"); + entity.Property(e => e.ExamType) + .HasDefaultValueSql("'1'") + .HasComment("1-Free Exam 2-Paid Exam 3- Course/Batch Exam") + .HasColumnName("examtype"); + entity.Property(e => e.ExamUniqCode) + .HasMaxLength(20) + .HasColumnName("examuniqcode"); + entity.Property(e => e.IsCourseExam) + .HasDefaultValueSql("'1'") + .HasColumnName("iscourseexam"); + entity.Property(e => e.IsOnline) + .HasDefaultValueSql("'0'") + .HasColumnName("isonline"); + entity.Property(e => e.IsVisible).HasColumnName("isvisible"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.PrecedingExamIds) + .HasMaxLength(400) + .HasComment("List of examids that are to be cleared to write this exam") + .HasColumnName("precedingexamids"); + entity.Property(e => e.QuestionPaperId) + .HasMaxLength(36) + .HasColumnName("questionpaperid"); + entity.Property(e => e.QuestionPaperIds) + .HasMaxLength(100) + .HasComment("Using one questionpaperid, Provision for 5 comma separated questionpaperids ex:OQN-20151029024904") + .HasColumnName("questionpaperids"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.ServiceId) + .HasMaxLength(36) + .HasColumnName("serviceid"); + entity.Property(e => e.ShowDescription) + .HasDefaultValueSql("'0'") + .HasColumnName("showdescription"); + entity.Property(e => e.ShowHint) + .HasDefaultValueSql("'0'") + .HasColumnName("showhint"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubTopic1) + .HasMaxLength(20) + .HasColumnName("subtopic1"); + entity.Property(e => e.SubTopic2) + .HasMaxLength(20) + .HasColumnName("subtopic2"); + entity.Property(e => e.SubTopic3) + .HasMaxLength(20) + .HasColumnName("subtopic3"); + entity.Property(e => e.SubTopic4) + .HasMaxLength(20) + .HasColumnName("subtopic4"); + entity.Property(e => e.SubTopic5) + .HasMaxLength(20) + .HasColumnName("subtopic5"); + entity.Property(e => e.SubTopic6) + .HasMaxLength(20) + .HasColumnName("subtopic6"); + entity.Property(e => e.TotalCutOffMarks) + .HasMaxLength(50) + .HasColumnName("totalcutoffmarks"); + entity.Property(e => e.TotalMarksExamined).HasColumnName("totalmarksexamined"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => new { e.ConfigType, e.ExamName }) + .HasName("PRIMARY") + .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0 }); + + entity.ToTable("exams_config"); + + entity.Property(e => e.ConfigType).HasColumnName("config_type"); + entity.Property(e => e.ExamName) + .HasMaxLength(100) + .HasDefaultValueSql("''") + .HasColumnName("exam_name"); + entity.Property(e => e.ExamCutoffMarks) + .HasDefaultValueSql("'0'") + .HasColumnName("exam_cutoff_marks"); + entity.Property(e => e.ExamDuration).HasColumnName("exam_duration"); + entity.Property(e => e.ExamOrder).HasColumnName("exam_order"); + entity.Property(e => e.IsOmr).HasColumnName("is_omr"); + entity.Property(e => e.PrecedingExamName) + .HasMaxLength(400) + .HasColumnName("preceding_exam_name"); + entity.Property(e => e.SectionDetails) + .HasMaxLength(1000) + .HasColumnName("section_details"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1-Active 2-Inactive 3-Deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionDetails) + .HasColumnType("text") + .HasColumnName("subsection_details"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToView("getcandidateexam"); + + entity.Property(e => e.Address1City) + .HasMaxLength(50) + .HasColumnName("address1_city") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address1Country) + .HasMaxLength(50) + .HasColumnName("address1_country") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address1Pincode) + .HasMaxLength(20) + .HasColumnName("address1_pincode") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address1State) + .HasMaxLength(50) + .HasColumnName("address1_state") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address1Street1) + .HasMaxLength(50) + .HasColumnName("address1_street1") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address1Street2) + .HasMaxLength(50) + .HasColumnName("address1_street2") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2City) + .HasMaxLength(50) + .HasColumnName("address2_city") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2Country) + .HasMaxLength(50) + .HasColumnName("address2_country") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2Pincode) + .HasMaxLength(20) + .HasColumnName("address2_pincode") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2State) + .HasMaxLength(50) + .HasColumnName("address2_state") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2Street1) + .HasMaxLength(50) + .HasColumnName("address2_street1") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Address2Street2) + .HasMaxLength(100) + .HasColumnName("address2_street2") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.BatchId) + .HasMaxLength(36) + .HasColumnName("batchid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.CandidateExamId) + .HasMaxLength(36) + .HasColumnName("candidateexamid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.DateOfBirth) + .HasColumnType("datetime") + .HasColumnName("dateofbirth"); + entity.Property(e => e.EmailAddress) + .HasMaxLength(50) + .HasColumnName("emailaddress") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.EmergencyContactNumber) + .HasMaxLength(20) + .HasColumnName("emergencycontactnumber") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamDate).HasColumnName("examdate"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamName) + .HasMaxLength(100) + .HasColumnName("examname") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamsCreatedOn) + .HasColumnType("datetime") + .HasColumnName("exams_createdon"); + entity.Property(e => e.ExamsExamId) + .HasMaxLength(36) + .HasColumnName("exams_examid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamsExamUniqCode) + .HasMaxLength(20) + .HasColumnName("exams_examuniqcode") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamsModifiedBy) + .HasMaxLength(36) + .HasColumnName("exams_modifiedby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamsModifiedOn) + .HasColumnType("datetime") + .HasColumnName("exams_modifiedon"); + entity.Property(e => e.ExamsReatedBy) + .HasMaxLength(36) + .HasColumnName("exams_reatedby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ExamsStatus) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("exams_status"); + entity.Property(e => e.ExamTime) + .HasColumnType("time") + .HasColumnName("examtime"); + entity.Property(e => e.ExamType) + .HasDefaultValueSql("'1'") + .HasComment("1-Free Exam 2-Paid Exam 3- Course/Batch Exam") + .HasColumnName("examtype"); + entity.Property(e => e.ExamUniqCode) + .HasMaxLength(20) + .HasColumnName("examuniqcode") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.FacebookId) + .HasMaxLength(50) + .HasColumnName("facebookid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.FirstName) + .HasMaxLength(50) + .HasColumnName("firstname") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Gender).HasColumnName("gender"); + entity.Property(e => e.IsCourseExam) + .HasDefaultValueSql("'1'") + .HasColumnName("iscourseexam"); + entity.Property(e => e.LastName) + .HasMaxLength(50) + .HasColumnName("lastname") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.LinkedinId) + .HasMaxLength(50) + .HasColumnName("linkedinid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.MobileNumber) + .HasMaxLength(20) + .HasColumnName("mobilenumber") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Password) + .HasMaxLength(20) + .HasColumnName("password") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.RegistrationNumber) + .HasMaxLength(20) + .HasColumnName("registrationumber") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Salutation) + .HasMaxLength(5) + .IsFixedLength() + .HasColumnName("salutation") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - Exam running, 2 - Exam Completed, 3 - Deative") + .HasColumnName("status"); + entity.Property(e => e.ThumbImpression) + .HasMaxLength(100) + .HasComment("Path of thumb impression") + .HasColumnName("thumbimpression") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.TraineePhoto) + .HasMaxLength(100) + .HasComment("Path of trainee photo") + .HasColumnName("traineephoto") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UserDisplayId) + .HasMaxLength(20) + .HasColumnName("userdisplayid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UserName) + .HasMaxLength(100) + .HasColumnName("username") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UsersCreatedBy) + .HasMaxLength(36) + .HasColumnName("users_createdby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UsersCreatedOn) + .HasColumnType("datetime") + .HasColumnName("users_createdon"); + entity.Property(e => e.UsersModifiedBy) + .HasMaxLength(36) + .HasColumnName("users_modifiedby") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UsersModifiedOn) + .HasColumnType("datetime") + .HasColumnName("users_modifiedon"); + entity.Property(e => e.UsersStatus) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9") + .HasColumnName("users_status"); + entity.Property(e => e.UsersUserId) + .HasMaxLength(36) + .HasColumnName("users_userid") + .UseCollation("utf8_general_ci") + .HasCharSet("utf8"); + entity.Property(e => e.UserType) + .HasComment("0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider") + .HasColumnName("usertype"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.GroupDisplayId).HasName("PRIMARY"); + + entity + .ToTable("groups") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.GroupDisplayId).HasColumnName("groupdisplayid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.GroupDescription) + .HasComment("Passage for comprehension questions") + .HasColumnType("text") + .HasColumnName("groupdescription"); + entity.Property(e => e.GroupId) + .HasMaxLength(36) + .HasColumnName("groupid"); + entity.Property(e => e.ImagePath) + .HasMaxLength(100) + .HasColumnName("imagepath"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasColumnName("subsectionid"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.LogId).HasName("PRIMARY"); + + entity.ToTable("logs"); + + entity.Property(e => e.LogId) + .HasMaxLength(36) + .HasColumnName("logid"); + entity.Property(e => e.Action) + .HasColumnType("text") + .HasColumnName("action"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.EmailAddress) + .HasMaxLength(50) + .HasColumnName("emailaddress"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.PageName) + .HasMaxLength(500) + .HasColumnName("pagename"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserName) + .HasMaxLength(100) + .HasColumnName("username"); + entity.Property(e => e.UserType).HasColumnName("usertype"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("marks") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => e.UserId, "FK_marks"); + + entity.Property(e => e.CourseId) + .HasMaxLength(36) + .HasColumnName("courseid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.CutOffMarks) + .HasMaxLength(50) + .HasColumnName("cutoffmarks"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.ExamWrittenDate) + .HasMaxLength(20) + .HasColumnName("examwrittendate"); + entity.Property(e => e.Grade) + .HasMaxLength(1) + .IsFixedLength() + .HasColumnName("grade"); + entity.Property(e => e.IsReportSent).HasColumnName("isreportsent"); + entity.Property(e => e.MarksId) + .HasMaxLength(36) + .HasColumnName("marksid"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.NegativeMarksSecured).HasColumnName("negativemarkssecured"); + entity.Property(e => e.PositiveMarksSecured).HasColumnName("positivemarkssecured"); + entity.Property(e => e.QuestionPaperId) + .HasMaxLength(36) + .HasColumnName("questionpaperid"); + entity.Property(e => e.ReportDate) + .HasColumnType("datetime") + .HasColumnName("reportdate"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TimeRelapsed) + .HasMaxLength(4) + .HasColumnName("timerelapsed"); + entity.Property(e => e.TotalMarksExamined).HasColumnName("totalmarksexamined"); + entity.Property(e => e.TotalMarksSecured).HasColumnName("totalmarkssecured"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("markdetails") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.ActualMarks).HasColumnName("actualmarks"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.Markdetailsid) + .HasMaxLength(36) + .HasColumnName("markdetailsid"); + entity.Property(e => e.MarksId) + .HasMaxLength(36) + .HasComment("References marks.marksid") + .HasColumnName("marksid"); + entity.Property(e => e.MarksSecured).HasColumnName("markssecured"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.NegativeMarks).HasColumnName("negativemarks"); + entity.Property(e => e.NumberOfQuestions) + .HasMaxLength(50) + .HasColumnName("numberofquestions"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasColumnName("subsectionid"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => new { e.SequenceNumber, e.QuestionPaperId, e.ExamId }) + .HasName("PRIMARY") + .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0, 0 }); + + entity + .ToTable("onlineexamquestionpapers") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.QuestionPaperId }, "onlineexamquestionpapers_tpid_examid_qpid"); + + entity.Property(e => e.SequenceNumber).HasColumnName("sequencenumber"); + entity.Property(e => e.QuestionPaperId).HasColumnName("questionpaperid"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("examid"); + entity.Property(e => e.Answer) + .HasMaxLength(1) + .HasComment("It contains one of four opions i.e a,b,c,d") + .HasColumnName("answer"); + entity.Property(e => e.AnswerFilePath) + .HasMaxLength(100) + .HasColumnName("answerfilepath"); + entity.Property(e => e.AnswerFormat) + .HasMaxLength(30) + .HasColumnName("answerformat"); + entity.Property(e => e.Complexity).HasColumnName("complexity"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.DescriptiveAnswer) + .HasColumnType("text") + .HasColumnName("descriptiveanswer"); + entity.Property(e => e.DescriptiveAnswerExplanation) + .HasColumnType("text") + .HasColumnName("descriptiveanswerexplanation"); + entity.Property(e => e.ExamOrCourseId) + .HasMaxLength(36) + .HasColumnName("examorcourseid"); + entity.Property(e => e.GroupDescription) + .HasComment("For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) ") + .HasColumnType("text") + .HasColumnName("groupdescription"); + entity.Property(e => e.GroupDisplayId).HasColumnName("groupdisplayid"); + entity.Property(e => e.GroupId) + .HasMaxLength(36) + .HasColumnName("groupid"); + entity.Property(e => e.ImagePath) + .HasMaxLength(100) + .HasColumnName("imagepath"); + entity.Property(e => e.IsOmr) + .HasComment("1 - the questionis of OMR type, 2- the questionis non OMR type") + .HasColumnName("IsOMR"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.NegativeMarksPerQuestion).HasColumnName("negativemarksperquestion"); + entity.Property(e => e.Option1) + .HasMaxLength(250) + .HasColumnName("option1"); + entity.Property(e => e.Option1FilePath) + .HasMaxLength(100) + .HasColumnName("option1filepath"); + entity.Property(e => e.Option2) + .HasMaxLength(250) + .HasColumnName("option2"); + entity.Property(e => e.Option2FilePath) + .HasMaxLength(100) + .HasColumnName("option2filepath"); + entity.Property(e => e.Option3) + .HasMaxLength(250) + .HasColumnName("option3"); + entity.Property(e => e.Option3FilePath) + .HasMaxLength(100) + .HasColumnName("option3filepath"); + entity.Property(e => e.Option4) + .HasMaxLength(250) + .HasColumnName("option4"); + entity.Property(e => e.Option4FilePath) + .HasMaxLength(100) + .HasColumnName("option4filepath"); + entity.Property(e => e.PositiveMarksPerQuestion).HasColumnName("positivemarksperquestion"); + entity.Property(e => e.QuestionDescription) + .HasColumnType("text") + .HasColumnName("questiondescription"); + entity.Property(e => e.QuestionFilePath) + .HasMaxLength(100) + .HasColumnName("questionfilepath"); + entity.Property(e => e.QuestionHint) + .HasColumnType("text") + .HasColumnName("questionhint"); + entity.Property(e => e.QuestionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("questionid"); + entity.Property(e => e.SectionDescription) + .HasMaxLength(200) + .HasDefaultValueSql("''") + .HasColumnName("sectiondescription"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("sectionid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionDescription) + .HasMaxLength(200) + .HasDefaultValueSql("''") + .HasColumnName("subsectiondescription"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("subsectionid"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("onlineexamsubmittedanswers") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.CorrectAnswer) + .HasMaxLength(100) + .HasColumnName("correctanswer"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.NegativeMarks) + .HasColumnType("float(5,2)") + .HasColumnName("negativemarks"); + entity.Property(e => e.ObtainedMarks) + .HasColumnType("float(5,2)") + .HasColumnName("obtainedmarks"); + entity.Property(e => e.PositiveMarks) + .HasColumnType("float(5,2)") + .HasColumnName("positivemarks"); + entity.Property(e => e.QuestionId) + .HasMaxLength(36) + .HasColumnName("questionid"); + entity.Property(e => e.QuestionNumber).HasColumnName("questionnumber"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.SubmittedAnswer) + .HasMaxLength(50) + .HasColumnName("submittedanswer"); + entity.Property(e => e.SubmittedTime) + .HasColumnType("time") + .HasColumnName("submittedtime"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasColumnName("subsectionid"); + entity.Property(e => e.TableName) + .HasMaxLength(100) + .HasColumnName("tablename"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("printdetails") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.CourseId) + .HasMaxLength(36) + .HasColumnName("courseid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.Instructions) + .HasColumnType("text") + .HasColumnName("instructions"); + entity.Property(e => e.IsOnline) + .HasDefaultValueSql("'0'") + .HasColumnName("isonline"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.PrintDetailId) + .HasMaxLength(36) + .HasColumnName("printdetailid"); + entity.Property(e => e.QuestionPaperId) + .HasMaxLength(36) + .HasColumnName("questionpaperid"); + entity.Property(e => e.QuestionPaperPath) + .HasMaxLength(100) + .HasColumnName("questionpaperpath"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.QualificationId).HasName("PRIMARY"); + + entity + .ToTable("qualifications") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => e.UserId, "FK_qualifications"); + + entity.Property(e => e.QualificationId) + .HasMaxLength(36) + .HasColumnName("qualificationid"); + entity.Property(e => e.BoardUniversity) + .HasMaxLength(50) + .HasColumnName("board_university"); + entity.Property(e => e.City) + .HasMaxLength(50) + .HasColumnName("city"); + entity.Property(e => e.CompleteStatus) + .HasComment("1-passed 2- failed 3- discontinued") + .HasColumnName("completestatus"); + entity.Property(e => e.Country) + .HasMaxLength(50) + .HasColumnName("country"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.MarksSecured).HasColumnName("markssecured"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.PassedOn).HasColumnName("passedon"); + entity.Property(e => e.Percentage).HasColumnName("percentage"); + entity.Property(e => e.Pincode) + .HasMaxLength(20) + .HasColumnName("pincode"); + entity.Property(e => e.QualificationLevel) + .HasComment("1 - School 2 - Intermediate 3 - Graduation 4 - Post Graduation") + .HasColumnName("qualification_level"); + entity.Property(e => e.QualificationName) + .HasMaxLength(50) + .HasColumnName("qualificationname"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.SchoolCollageName) + .HasMaxLength(200) + .HasColumnName("school_collagename"); + entity.Property(e => e.Specialization) + .HasMaxLength(50) + .HasColumnName("specialization"); + entity.Property(e => e.State) + .HasMaxLength(50) + .HasColumnName("state"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.Street1) + .HasMaxLength(50) + .HasColumnName("street1"); + entity.Property(e => e.Street2) + .HasMaxLength(50) + .HasColumnName("street2"); + entity.Property(e => e.TotalMarks).HasColumnName("totalmarks"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => new { e.TrainingProviderId, e.SectionId, e.SubsectionId, e.QuestionId }) + .HasName("PRIMARY") + .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0, 0, 0 }); + + entity + .ToTable("questions") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("sectionid"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("subsectionid"); + entity.Property(e => e.QuestionId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("questionid"); + entity.Property(e => e.Answer) + .HasMaxLength(1) + .HasComment("It contains one of four opions i.e a,b,c,d") + .HasColumnName("answer"); + entity.Property(e => e.AnswerFilePath) + .HasMaxLength(100) + .HasColumnName("answerfilepath"); + entity.Property(e => e.AnswerFormat) + .HasMaxLength(30) + .HasColumnName("answerformat"); + entity.Property(e => e.Complexity).HasColumnName("complexity"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.DescriptiveAnswer) + .HasColumnType("text") + .HasColumnName("descriptiveanswer"); + entity.Property(e => e.DescriptiveAnswerExplanation) + .HasColumnType("text") + .HasColumnName("descriptiveanswerexplanation"); + entity.Property(e => e.ExamorCourseId).HasMaxLength(36); + entity.Property(e => e.GroupId) + .HasMaxLength(36) + .HasComment("For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) ") + .HasColumnName("groupid"); + entity.Property(e => e.IsOmr) + .HasComment("1 - the questionis of OMR type, 2- the questionis non OMR type") + .HasColumnName("IsOMR"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Option1) + .HasMaxLength(250) + .HasColumnName("option1"); + entity.Property(e => e.Option1FilePath) + .HasMaxLength(100) + .HasColumnName("option1filepath"); + entity.Property(e => e.Option2) + .HasMaxLength(250) + .HasColumnName("option2"); + entity.Property(e => e.Option2FilePath) + .HasMaxLength(100) + .HasColumnName("option2filepath"); + entity.Property(e => e.Option3) + .HasMaxLength(250) + .HasColumnName("option3"); + entity.Property(e => e.Option3FilePath) + .HasMaxLength(100) + .HasColumnName("option3filepath"); + entity.Property(e => e.Option4) + .HasMaxLength(250) + .HasColumnName("option4"); + entity.Property(e => e.Option4FilePath) + .HasMaxLength(100) + .HasColumnName("option4filepath"); + entity.Property(e => e.QuestionDescription) + .HasColumnType("text") + .HasColumnName("questiondescription"); + entity.Property(e => e.QuestionFilePath) + .HasMaxLength(100) + .HasColumnName("questionfilepath"); + entity.Property(e => e.QuestionHint) + .HasColumnType("text") + .HasColumnName("questionhint"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("questiondetails") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.QuestionPaperId }, "questiondetails_tpid_examid_qpid"); + + entity.Property(e => e.CourseId) + .HasMaxLength(36) + .HasColumnName("courseid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.CutOffMarks) + .HasMaxLength(50) + .HasColumnName("cutoffmarks"); + entity.Property(e => e.ExamId) + .HasMaxLength(36) + .HasColumnName("examid"); + entity.Property(e => e.GroupCount).HasColumnName("groupcount"); + entity.Property(e => e.IsOmr).HasColumnName("isomr"); + entity.Property(e => e.IsOnline) + .HasDefaultValueSql("'0'") + .HasColumnName("isonline"); + entity.Property(e => e.MarksExamined) + .HasMaxLength(50) + .HasColumnName("marksexamined"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.NegativeMarks).HasColumnName("negativemarks"); + entity.Property(e => e.NumberOfQuestions) + .HasMaxLength(50) + .HasColumnName("numberofquestions"); + entity.Property(e => e.QuestionDetailId) + .HasMaxLength(36) + .HasColumnName("questiondetailid"); + entity.Property(e => e.QuestionPaperId) + .HasMaxLength(36) + .HasColumnName("questionpaperid"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasColumnName("subsectionid"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.SectionId).HasName("PRIMARY"); + + entity + .ToTable("sections") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.SectionDescription) + .HasMaxLength(100) + .HasColumnName("sectiondescription"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.Suggestions) + .HasMaxLength(400) + .HasColumnName("suggestions"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.ServiceId).HasName("PRIMARY"); + + entity + .ToTable("services") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.ServiceId) + .HasMaxLength(36) + .HasColumnName("serviceid"); + entity.Property(e => e.Amount) + .HasComment("1-FreeExam 0-PaidExam") + .HasColumnName("amount"); + entity.Property(e => e.Category) + .HasMaxLength(50) + .HasColumnName("category"); + entity.Property(e => e.ChildServiceId) + .HasComment("stores multiple serviceids seperated with comma") + .HasColumnType("text") + .HasColumnName("childserviceid"); + entity.Property(e => e.ClassHours).HasColumnName("classhours"); + entity.Property(e => e.CourseDuration).HasColumnName("courseduration"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.Description) + .HasMaxLength(200) + .HasColumnName("description"); + entity.Property(e => e.Faculty) + .HasMaxLength(36) + .HasComment("employeeid") + .HasColumnName("faculty"); + entity.Property(e => e.Fees).HasColumnName("fees"); + entity.Property(e => e.IsExam).HasComment("2- exam 1- course"); + entity.Property(e => e.LabHours).HasColumnName("labhours"); + entity.Property(e => e.MaxNumber).HasColumnName("maxnumber"); + entity.Property(e => e.MinNumber).HasColumnName("minnumber"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.ServiceName) + .HasMaxLength(200) + .HasColumnName("servicename"); + entity.Property(e => e.ServiceType) + .HasComment("1- single course 2- multiple coureses") + .HasColumnName("servicetype"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("studentdetails") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.Branch) + .HasMaxLength(50) + .HasColumnName("branch"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.EmailId) + .HasMaxLength(50) + .HasColumnName("emailid"); + entity.Property(e => e.FirstYearBackLogs).HasColumnName("firstyearbacklogs"); + entity.Property(e => e.FirstYearPercentage).HasColumnName("firstyearpercentage"); + entity.Property(e => e.HallTicketNumber) + .HasMaxLength(20) + .HasComment("hall ticket number is unique for every candidate") + .HasColumnName("hallticketnumber"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Name) + .HasMaxLength(100) + .HasColumnName("name"); + entity.Property(e => e.OverallPercentage).HasColumnName("overallpercentage"); + entity.Property(e => e.SecondYearBackLogs).HasColumnName("secondyearbacklogs"); + entity.Property(e => e.SecondYearPercentage).HasColumnName("secondyearpercentage"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.ThirdYearBackLogs).HasColumnName("thirdyearbacklogs"); + entity.Property(e => e.ThirdYearPercentage).HasColumnName("thirdyearpercentage"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasDefaultValueSql("''") + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.TrainingId).HasName("PRIMARY"); + + entity + .ToTable("subscribed_training") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.TrainingId) + .HasMaxLength(36) + .HasColumnName("trainingid"); + entity.Property(e => e.Amount).HasColumnName("amount"); + entity.Property(e => e.BatchId) + .HasColumnType("text") + .HasColumnName("batchid"); + entity.Property(e => e.CourseId) + .HasMaxLength(36) + .HasComment("services id for course") + .HasColumnName("courseid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.SubsectionId).HasName("PRIMARY"); + + entity + .ToTable("subsections") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.SubsectionId) + .HasMaxLength(36) + .HasColumnName("subsectionid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.SectionId) + .HasMaxLength(36) + .HasColumnName("sectionid"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.SubsectionDescription) + .HasMaxLength(100) + .HasColumnName("subsectiondescription"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("test__user_registrationdetails") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.FailedDbReason) + .HasMaxLength(2000) + .HasColumnName("failed_db_reason"); + entity.Property(e => e.HtNo) + .HasMaxLength(50) + .HasColumnName("htno"); + entity.Property(e => e.InsertStmt) + .HasColumnType("text") + .HasColumnName("insert_stmt"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.ThemeTemplateId).HasName("PRIMARY"); + + entity + .ToTable("themetemplates") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.ThemeTemplateId).HasColumnName("themetemplateid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + entity.Property(e => e.ThemeTemplateName) + .HasMaxLength(100) + .HasColumnName("themetemplatename"); + entity.Property(e => e.ThemeTemplatePath) + .HasMaxLength(100) + .HasColumnName("themetemplatepath"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.TrainingProviderId).HasName("PRIMARY"); + + entity + .ToTable("trainingprovider") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted") + .HasColumnName("status"); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.UserId).HasName("PRIMARY"); + + entity + .ToTable("users") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + entity.Property(e => e.Address1City) + .HasMaxLength(50) + .HasColumnName("address1_city"); + entity.Property(e => e.Address1Country) + .HasMaxLength(50) + .HasColumnName("address1_country"); + entity.Property(e => e.Address1Pincode) + .HasMaxLength(20) + .HasColumnName("address1_pincode"); + entity.Property(e => e.Address1State) + .HasMaxLength(50) + .HasColumnName("address1_state"); + entity.Property(e => e.Address1Street1) + .HasMaxLength(50) + .HasColumnName("address1_street1"); + entity.Property(e => e.Address1Street2) + .HasMaxLength(50) + .HasColumnName("address1_street2"); + entity.Property(e => e.Address2City) + .HasMaxLength(50) + .HasColumnName("address2_city"); + entity.Property(e => e.Address2Country) + .HasMaxLength(50) + .HasColumnName("address2_country"); + entity.Property(e => e.Address2Pincode) + .HasMaxLength(20) + .HasColumnName("address2_pincode"); + entity.Property(e => e.Address2State) + .HasMaxLength(50) + .HasColumnName("address2_state"); + entity.Property(e => e.Address2Street1) + .HasMaxLength(50) + .HasColumnName("address2_street1"); + entity.Property(e => e.Address2Street2) + .HasMaxLength(100) + .HasColumnName("address2_street2"); + entity.Property(e => e.CandidateComments) + .HasMaxLength(500) + .HasColumnName("candidatecomments"); + entity.Property(e => e.Comments) + .HasMaxLength(500) + .HasColumnName("comments"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.DateOfBirth) + .HasColumnType("datetime") + .HasColumnName("dateofbirth"); + entity.Property(e => e.EmailAddress) + .HasMaxLength(50) + .HasColumnName("emailaddress"); + entity.Property(e => e.EmergencyContactNumber) + .HasMaxLength(20) + .HasColumnName("emergencycontactnumber"); + entity.Property(e => e.FacebookId) + .HasMaxLength(50) + .HasColumnName("facebookid"); + entity.Property(e => e.Features) + .HasColumnType("text") + .HasColumnName("features"); + entity.Property(e => e.FingerPrintValue) + .HasMaxLength(100) + .HasComment("Path of finger print") + .HasColumnName("fingerprintvalue"); + entity.Property(e => e.FirstName) + .HasMaxLength(50) + .HasColumnName("firstname"); + entity.Property(e => e.Gender).HasColumnName("gender"); + entity.Property(e => e.HallTicket) + .HasMaxLength(20) + .HasColumnName("hallticket"); + entity.Property(e => e.IsAcceptedTermsAndConditions).HasColumnName("isacceptedtermsandconditions"); + entity.Property(e => e.LastName) + .HasMaxLength(50) + .HasColumnName("lastname"); + entity.Property(e => e.LinkedinId) + .HasMaxLength(50) + .HasColumnName("linkedinid"); + entity.Property(e => e.MobileNumber) + .HasMaxLength(20) + .HasColumnName("mobilenumber"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Password) + .HasMaxLength(20) + .HasColumnName("password"); + entity.Property(e => e.ProfilePicPath) + .HasMaxLength(100) + .HasComment("Path of profile picture") + .HasColumnName("profilepicpath"); + entity.Property(e => e.QuestionPaperSetNumber).HasColumnName("questionpapersetnumber"); + entity.Property(e => e.RegistrationNumber) + .HasMaxLength(20) + .HasColumnName("registrationumber"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.Salutation) + .HasMaxLength(5) + .IsFixedLength() + .HasColumnName("salutation"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9") + .HasColumnName("status"); + entity.Property(e => e.ThumbImpression) + .HasMaxLength(100) + .HasComment("Path of thumb impression") + .HasColumnName("thumbimpression"); + entity.Property(e => e.TraineePhoto) + .HasMaxLength(100) + .HasComment("Path of trainee photo") + .HasColumnName("traineephoto"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UnSubscribe).HasColumnName("unsubscribe"); + entity.Property(e => e.UserDisplayId) + .HasMaxLength(20) + .HasColumnName("userdisplayid"); + entity.Property(e => e.UserType) + .HasComment("0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider") + .HasColumnName("usertype"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj new file mode 100644 index 0000000..f70804f --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj @@ -0,0 +1,28 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs new file mode 100644 index 0000000..7a0515f --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs @@ -0,0 +1,35 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class CandidateExamsDBO +{ + public string CandidateExamId { get; set; } = null!; + + public string? ExamId { get; set; } + + public string? UserId { get; set; } + + public string? ExamName { get; set; } + + public string? UserName { get; set; } + + public string? ExamUniqCode { get; set; } + + public string? QuestionPaperId { get; set; } + + public bool? IsVisible { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - Exam running, 2 - Exam Completed, 3 - Deative + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs new file mode 100644 index 0000000..0e3ea0f --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs @@ -0,0 +1,63 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class CompaniesDBO +{ + public string CompanyId { get; set; } = null!; + + /// + /// 0-Training center, 1=Campus Placement, 2-for main question bank + /// + public int? CompanyType { get; set; } + + public string? UniqueCode { get; set; } + + public string? TrainingProviderId { get; set; } + + public string? CompanyName { get; set; } + + public string? ContactName { get; set; } + + public string? ContactNumber { get; set; } + + public string? CompanyUrl { get; set; } + + public string? LinkedIn { get; set; } + + public string? Facebook { get; set; } + + /// + /// Path of company Logo + /// + public string? CompanyLogo { get; set; } + + public string? CompanyAddress { get; set; } + + /// + /// references themetemplates.themetemplateid + /// + public sbyte? ThemeId { get; set; } + + /// + /// 0 - Don't share db, 1 - share db + /// + public sbyte? IsShareDb { get; set; } + + public DateOnly? ExamDate { get; set; } + + public TimeOnly? ExamTime { get; set; } + + public string? Comments { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs new file mode 100644 index 0000000..c459f26 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs @@ -0,0 +1,62 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class CoursebatchesDBO +{ + public string CourseBatchId { get; set; } = null!; + + public string? CourseId { get; set; } + + public string? Name { get; set; } + + public DateTime? StartDate { get; set; } + + public DateTime? EndDate { get; set; } + + public string? StartTime { get; set; } + + public float? Duration { get; set; } + + /// + /// employeeid + /// + public string? Coordinator { get; set; } + + public int? MaxNumber { get; set; } + + public int? MinNumber { get; set; } + + public string? TrainingBranch { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } + + public float? Amount { get; set; } + + public float? LabHours { get; set; } + + public float? ClassHours { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs new file mode 100644 index 0000000..ede2007 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs @@ -0,0 +1,27 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class ExamsConfigDBO +{ + public sbyte ConfigType { get; set; } + + public sbyte? ExamOrder { get; set; } + + public string ExamName { get; set; } = null!; + + public sbyte? ExamDuration { get; set; } + + public sbyte? ExamCutoffMarks { get; set; } + + public sbyte? IsOmr { get; set; } + + public string? SectionDetails { get; set; } + + public string? SubsectionDetails { get; set; } + + public string? PrecedingExamName { get; set; } + + /// + /// 1-Active 2-Inactive 3-Deleted + /// + public bool? Status { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs new file mode 100644 index 0000000..d1c26f7 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs @@ -0,0 +1,90 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class ExamsDBO +{ + public string ExamId { get; set; } = null!; + + public string? ExamName { get; set; } + + /// + /// 1-Free Exam 2-Paid Exam 3- Course/Batch Exam + /// + public short? ExamType { get; set; } + + public DateOnly? ExamDate { get; set; } + + public TimeOnly? ExamTime { get; set; } + + public string? ExamDuration { get; set; } + + public float? TotalMarksExamined { get; set; } + + public string? TotalCutOffMarks { get; set; } + + /// + /// List of examids that are to be cleared to write this exam + /// + public string? PrecedingExamIds { get; set; } + + public bool? IsCourseExam { get; set; } + + public bool? IsOnline { get; set; } + + public bool? IsVisible { get; set; } + + public bool? ShowHint { get; set; } + + public bool? ShowDescription { get; set; } + + /// + /// Using one questionpaperid, Provision for 5 comma separated questionpaperids ex:OQN-20151029024904 + /// + public string? QuestionPaperIds { get; set; } + + public string? QuestionPaperId { get; set; } + + public string? ExamUniqCode { get; set; } + + public string? BatchId { get; set; } + + public string? ServiceId { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? SubTopic1 { get; set; } + + public string? SubTopic2 { get; set; } + + public string? SubTopic3 { get; set; } + + public string? SubTopic4 { get; set; } + + public string? SubTopic5 { get; set; } + + public string? SubTopic6 { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs new file mode 100644 index 0000000..e47b9e1 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs @@ -0,0 +1,141 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class GetCandidateExamsDBO +{ + public string CandidateExamId { get; set; } = null!; + + public string? ExamId { get; set; } + + public string? UserId { get; set; } + + public string? ExamUniqCode { get; set; } + + /// + /// 1 - Exam running, 2 - Exam Completed, 3 - Deative + /// + public bool? Status { get; set; } + + public DateTime? CreatedOn { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? CreatedBy { get; set; } + + public string? ModifiedBy { get; set; } + + public string? UserName { get; set; } + + public string? ExamsExamId { get; set; } + + public string? ExamName { get; set; } + + /// + /// 1-Free Exam 2-Paid Exam 3- Course/Batch Exam + /// + public short? ExamType { get; set; } + + public string? BatchId { get; set; } + + public DateOnly? ExamDate { get; set; } + + public DateTime? ExamsCreatedOn { get; set; } + + public DateTime? ExamsModifiedOn { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? ExamsStatus { get; set; } + + public string? ExamsReatedBy { get; set; } + + public string? ExamsModifiedBy { get; set; } + + public TimeOnly? ExamTime { get; set; } + + public string? ExamsExamUniqCode { get; set; } + + public bool? IsCourseExam { get; set; } + + public string? UsersUserId { get; set; } + + public string? UserDisplayId { get; set; } + + public string? FirstName { get; set; } + + public string? LastName { get; set; } + + public string? Salutation { get; set; } + + public string? EmailAddress { get; set; } + + public string? Password { get; set; } + + /// + /// 0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider + /// + public int? UserType { get; set; } + + public DateTime? DateOfBirth { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9 + /// + public bool? UsersStatus { get; set; } + + public DateTime? UsersCreatedOn { get; set; } + + public DateTime? UsersModifiedOn { get; set; } + + public string? UsersCreatedBy { get; set; } + + public string? UsersModifiedBy { get; set; } + + public string? Address1Street1 { get; set; } + + public string? Address1Street2 { get; set; } + + public string? Address1City { get; set; } + + public string? Address1State { get; set; } + + public string? Address1Country { get; set; } + + public string? Address1Pincode { get; set; } + + public string? Address2Street1 { get; set; } + + public string? Address2Street2 { get; set; } + + public string? Address2City { get; set; } + + public string? Address2State { get; set; } + + public string? Address2Country { get; set; } + + public string? Address2Pincode { get; set; } + + /// + /// Path of thumb impression + /// + public string? ThumbImpression { get; set; } + + /// + /// Path of trainee photo + /// + public string? TraineePhoto { get; set; } + + public string? MobileNumber { get; set; } + + public string? EmergencyContactNumber { get; set; } + + public string? LinkedinId { get; set; } + + public string? FacebookId { get; set; } + + public string? RegistrationNumber { get; set; } + + public string? TrainingProviderId { get; set; } + + public bool? Gender { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs new file mode 100644 index 0000000..2ec354e --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs @@ -0,0 +1,34 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class GroupsDBO +{ + public string GroupId { get; set; } = null!; + + public int GroupDisplayId { get; set; } + + public string? ImagePath { get; set; } + + /// + /// Passage for comprehension questions + /// + public string? GroupDescription { get; set; } + + public string? SectionId { get; set; } + + public string? SubsectionId { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs new file mode 100644 index 0000000..b80ae54 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs @@ -0,0 +1,31 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public class LogsDBO +{ + public string LogId { get; set; } = null!; + + public string? UserName { get; set; } + + public sbyte? UserType { get; set; } + + public string? EmailAddress { get; set; } + + public string? PageName { get; set; } + + public string Action { get; set; } = null!; + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs new file mode 100644 index 0000000..e52e576 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs @@ -0,0 +1,38 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class MarkdetailsDBO +{ + public string? Markdetailsid { get; set; } + + public string? NumberOfQuestions { get; set; } + + public int ActualMarks { get; set; } + + public float? MarksSecured { get; set; } + + public float? NegativeMarks { get; set; } + + /// + /// References marks.marksid + /// + public string? MarksId { get; set; } + + public string? SectionId { get; set; } + + public string? SubsectionId { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs new file mode 100644 index 0000000..678b562 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs @@ -0,0 +1,61 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class MarksDBO +{ + public string MarksId { get; set; } = null!; + + public string? ExamId { get; set; } + + public string? UserId { get; set; } + + public string? ExamWrittenDate { get; set; } + + public float? TotalMarksExamined { get; set; } + + public string? CutOffMarks { get; set; } + + public float? TotalMarksSecured { get; set; } + + public float? NegativeMarksSecured { get; set; } + + public float? PositiveMarksSecured { get; set; } + + public string? TimeRelapsed { get; set; } + + public sbyte? IsReportSent { get; set; } + + public DateTime? ReportDate { get; set; } + + public string? QuestionPaperId { get; set; } + + public string? CourseId { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? Grade { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs new file mode 100644 index 0000000..870aa3e --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs @@ -0,0 +1,94 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class OnlineExamQuestionPapersDBO +{ + public int SequenceNumber { get; set; } + + public int QuestionPaperId { get; set; } + + public string ExamId { get; set; } = null!; + + public string QuestionId { get; set; } = null!; + + /// + /// 1 - the questionis of OMR type, 2- the questionis non OMR type + /// + public sbyte? IsOmr { get; set; } + + public sbyte Complexity { get; set; } + + public float? NegativeMarksPerQuestion { get; set; } + + public float? PositiveMarksPerQuestion { get; set; } + + public string? QuestionDescription { get; set; } + + public string? QuestionHint { get; set; } + + public string? Option1 { get; set; } + + public string? Option2 { get; set; } + + public string? Option3 { get; set; } + + public string? Option4 { get; set; } + + /// + /// It contains one of four opions i.e a,b,c,d + /// + public string? Answer { get; set; } + + public string? AnswerFormat { get; set; } + + public string? DescriptiveAnswer { get; set; } + + public string? QuestionFilePath { get; set; } + + public string? Option1FilePath { get; set; } + + public string? Option2FilePath { get; set; } + + public string? Option3FilePath { get; set; } + + public string? Option4FilePath { get; set; } + + public string? AnswerFilePath { get; set; } + + public string? DescriptiveAnswerExplanation { get; set; } + + public int? GroupDisplayId { get; set; } + + public string? ImagePath { get; set; } + + /// + /// For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) + /// + public string? GroupDescription { get; set; } + + public string? ExamOrCourseId { get; set; } + + public string? GroupId { get; set; } + + public string SectionId { get; set; } = null!; + + public string SectionDescription { get; set; } = null!; + + public string SubsectionId { get; set; } = null!; + + public string SubsectionDescription { get; set; } = null!; + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs new file mode 100644 index 0000000..68cc51c --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs @@ -0,0 +1,34 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class OnlineExamSubmittedAnswersDBO +{ + public DateTime? CreatedOn { get; set; } + + public string UserId { get; set; } = null!; + + public string ExamId { get; set; } = null!; + + public string QuestionId { get; set; } = null!; + + public string? TableName { get; set; } + + public string? CorrectAnswer { get; set; } + + public string? SubmittedAnswer { get; set; } + + public int? QuestionNumber { get; set; } + + public string SectionId { get; set; } = null!; + + public string SubsectionId { get; set; } = null!; + + public TimeOnly? SubmittedTime { get; set; } + + public string? TrainingProviderId { get; set; } + + public float? PositiveMarks { get; set; } + + public float? NegativeMarks { get; set; } + + public float ObtainedMarks { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs new file mode 100644 index 0000000..ad5caa0 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs @@ -0,0 +1,33 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class PrintDetailsDBO +{ + public string? PrintDetailId { get; set; } + + public string? QuestionPaperId { get; set; } + + public bool? IsOnline { get; set; } + + public string? QuestionPaperPath { get; set; } + + public string? CourseId { get; set; } + + public string? ExamId { get; set; } + + public string? Instructions { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs new file mode 100644 index 0000000..7e3b25d --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs @@ -0,0 +1,97 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class QualificationsDBO +{ + public string QualificationId { get; set; } = null!; + + public string? UserId { get; set; } + + public string? QualificationName { get; set; } + + public string? Specialization { get; set; } + + /// + /// 1 - School 2 - Intermediate 3 - Graduation 4 - Post Graduation + /// + public bool? QualificationLevel { get; set; } + + public string? SchoolCollageName { get; set; } + + /// + /// 1-passed 2- failed 3- discontinued + /// + public int? CompleteStatus { get; set; } + + public int? TotalMarks { get; set; } + + public int? MarksSecured { get; set; } + + public string? BoardUniversity { get; set; } + + public float? Percentage { get; set; } + + public float? Aggregate1Year { get; set; } + + public float? Aggregate2Year { get; set; } + + public float? Aggregate3Year { get; set; } + + public float? Aggregate4Year { get; set; } + + public int? NumOfBacklogs1Year { get; set; } + + public int? NumOfBacklogs2Year { get; set; } + + public int? NumOfBacklogs3Year { get; set; } + + public int? NumOfBacklogs4Year { get; set; } + + public int? NumOfBacklogsPending1Year { get; set; } + + public int? NumOfBacklogsPending2Year { get; set; } + + public int? NumOfBacklogsPending3Year { get; set; } + + public int? NumOfBacklogsPending4Year { get; set; } + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? Street1 { get; set; } + + public string? Street2 { get; set; } + + public string? City { get; set; } + + public string? State { get; set; } + + public string? Country { get; set; } + + public string? Pincode { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } + + public short? PassedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs new file mode 100644 index 0000000..94b87f1 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs @@ -0,0 +1,45 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class QuestiondetailsDBO +{ + public string? QuestionDetailId { get; set; } + + public string? QuestionPaperId { get; set; } + + public string? ExamId { get; set; } + + public string? NumberOfQuestions { get; set; } + + public string? MarksExamined { get; set; } + + public string? CutOffMarks { get; set; } + + public sbyte? IsOmr { get; set; } + + public sbyte? IsOnline { get; set; } + + public int? GroupCount { get; set; } + + public float? NegativeMarks { get; set; } + + public string? CourseId { get; set; } + + public string? SectionId { get; set; } + + public string? SubsectionId { get; set; } + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs new file mode 100644 index 0000000..86bbe9e --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs @@ -0,0 +1,74 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class QuestionsDBO +{ + public string QuestionId { get; set; } = null!; + + /// + /// For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) + /// + public string? GroupId { get; set; } + + /// + /// 1 - the questionis of OMR type, 2- the questionis non OMR type + /// + public bool? IsOmr { get; set; } + + public bool Complexity { get; set; } + + public string? QuestionDescription { get; set; } + + public string? QuestionHint { get; set; } + + public string? Option1 { get; set; } + + public string? Option2 { get; set; } + + public string? Option3 { get; set; } + + public string? Option4 { get; set; } + + /// + /// It contains one of four opions i.e a,b,c,d + /// + public string? Answer { get; set; } + + public string? AnswerFormat { get; set; } + + public string? DescriptiveAnswer { get; set; } + + public string? QuestionFilePath { get; set; } + + public string? Option1FilePath { get; set; } + + public string? Option2FilePath { get; set; } + + public string? Option3FilePath { get; set; } + + public string? Option4FilePath { get; set; } + + public string? AnswerFilePath { get; set; } + + public string? DescriptiveAnswerExplanation { get; set; } + + public string? ExamorCourseId { get; set; } + + public string SectionId { get; set; } = null!; + + public string SubsectionId { get; set; } = null!; + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs new file mode 100644 index 0000000..fa779e3 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs @@ -0,0 +1,25 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class SectionsDBO +{ + public string SectionId { get; set; } = null!; + + public string? SectionDescription { get; set; } + + public string Suggestions { get; set; } = null!; + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs new file mode 100644 index 0000000..40267e3 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs @@ -0,0 +1,78 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class ServicesDBO +{ + public string ServiceId { get; set; } = null!; + + public string? ServiceName { get; set; } + + /// + /// 1- single course 2- multiple coureses + /// + public short? ServiceType { get; set; } + + /// + /// stores multiple serviceids seperated with comma + /// + public string? ChildServiceId { get; set; } + + public string? Description { get; set; } + + public string? Category { get; set; } + + public short? MaxNumber { get; set; } + + public short? MinNumber { get; set; } + + public float? Fees { get; set; } + + /// + /// employeeid + /// + public string? Faculty { get; set; } + + public float? CourseDuration { get; set; } + + /// + /// 2- exam 1- course + /// + public bool? IsExam { get; set; } + + public bool? IsFreeExam { get; set; } + + /// + /// 1-FreeExam 0-PaidExam + /// + public float? Amount { get; set; } + + public float? ClassHours { get; set; } + + public float? LabHours { get; set; } + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs new file mode 100644 index 0000000..9031a91 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs @@ -0,0 +1,44 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class StudentdetailsDBO +{ + /// + /// hall ticket number is unique for every candidate + /// + public string HallTicketNumber { get; set; } = null!; + + public string Name { get; set; } = null!; + + public string? Branch { get; set; } + + public float? FirstYearPercentage { get; set; } + + public float? SecondYearPercentage { get; set; } + + public float? ThirdYearPercentage { get; set; } + + public float? OverallPercentage { get; set; } + + public int? FirstYearBackLogs { get; set; } + + public int? SecondYearBackLogs { get; set; } + + public int? ThirdYearBackLogs { get; set; } + + public string? EmailId { get; set; } + + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs new file mode 100644 index 0000000..5763b1e --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs @@ -0,0 +1,44 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class SubscribedTrainingsDBO +{ + public string TrainingId { get; set; } = null!; + + public string? UserId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + /// + /// services id for course + /// + public string? CourseId { get; set; } + + public string? BatchId { get; set; } + + public float? Amount { get; set; } + + public string? TrainingProviderId { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs new file mode 100644 index 0000000..205b1c9 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs @@ -0,0 +1,25 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class SubsectionsDBO +{ + public string SubsectionId { get; set; } = null!; + + public string? SubsectionDescription { get; set; } + + public string? SectionId { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs new file mode 100644 index 0000000..cda9626 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs @@ -0,0 +1,10 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class TestUserRegistrationdetailsDBO +{ + public string? HtNo { get; set; } + + public string? FailedDbReason { get; set; } + + public string? InsertStmt { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs new file mode 100644 index 0000000..72dc005 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs @@ -0,0 +1,23 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class ThemeTemplatesDBO +{ + public sbyte ThemeTemplateId { get; set; } + + public string? ThemeTemplateName { get; set; } + + public string? ThemeTemplatePath { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs new file mode 100644 index 0000000..7b48c99 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs @@ -0,0 +1,19 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class TrainingprovidersDBO +{ + public string TrainingProviderId { get; set; } = null!; + + /// + /// 1 - active, 2 - deactive, 3 - deleted + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs new file mode 100644 index 0000000..7accea1 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs @@ -0,0 +1,122 @@ +namespace DotnetBoilerPlate.DAL.Models; + +public partial class UsersDBO +{ + public string UserId { get; set; } = null!; + + public string? UserDisplayId { get; set; } + + /// + /// 0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider + /// + public int? UserType { get; set; } + + public string? FirstName { get; set; } + + public string? LastName { get; set; } + + public string? Salutation { get; set; } + + public string? MobileNumber { get; set; } + + public string? EmergencyContactNumber { get; set; } + + public string? EmailAddress { get; set; } + + public string? RegistrationNumber { get; set; } + + public string? Password { get; set; } + + public string? HallTicket { get; set; } + + public sbyte? QuestionPaperSetNumber { get; set; } + + public string? LinkedinId { get; set; } + + public string? FacebookId { get; set; } + + public bool? IsAcceptedTermsAndConditions { get; set; } + + public sbyte UnSubscribe { get; set; } + + /// + /// Path of profile picture + /// + public string? ProfilePicPath { get; set; } + + /// + /// Path of trainee photo + /// + public string? TraineePhoto { get; set; } + + /// + /// Path of finger print + /// + public string? FingerPrintValue { get; set; } + + /// + /// Path of thumb impression + /// + public string? ThumbImpression { get; set; } + + public bool? Gender { get; set; } + + public DateTime? DateOfBirth { get; set; } + + public string? Comments { get; set; } + + public string? CandidateComments { get; set; } + + public string? TrainingProviderId { get; set; } + + /// + /// 1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9 + /// + public bool? Status { get; set; } + + public string? CreatedBy { get; set; } + + public DateTime? CreatedOn { get; set; } + + public string? ModifiedBy { get; set; } + + public DateTime? ModifiedOn { get; set; } + + public string? Address1Street1 { get; set; } + + public string? Address1Street2 { get; set; } + + public string? Address1City { get; set; } + + public string? Address1State { get; set; } + + public string? Address1Country { get; set; } + + public string? Address1Pincode { get; set; } + + public string? Address2Street1 { get; set; } + + public string? Address2Street2 { get; set; } + + public string? Address2City { get; set; } + + public string? Address2State { get; set; } + + public string? Address2Country { get; set; } + + public string? Address2Pincode { get; set; } + + public string? ResString1 { get; set; } + + public string? ResString2 { get; set; } + + public float? ResFloat1 { get; set; } + + public float? ResFloat2 { get; set; } + + public int? ResInt1 { get; set; } + + public int? ResInt2 { get; set; } + + public string? Features { get; set; } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs new file mode 100644 index 0000000..d0c0482 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs @@ -0,0 +1,10 @@ +using DotnetBoilerPlate.DAL.Models; + +namespace DotnetBoilerPlate.DAL.Repositories.Interfaces +{ + public interface IUsersRepo + { + List GetAllUsers(); + UsersDBO GetUserById(string userId); + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs new file mode 100644 index 0000000..92b1019 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs @@ -0,0 +1,25 @@ +using DotnetBoilerPlate.DAL.DatabaseContext; +using DotnetBoilerPlate.DAL.Models; +using DotnetBoilerPlate.DAL.Repositories.Interfaces; + +namespace DotnetBoilerPlate.DAL.Repositories +{ + public class UsersRepo : IUsersRepo + { + private readonly SqlDatabaseContext _databaseContext; + + public UsersRepo(SqlDatabaseContext databaseContext) => _databaseContext = databaseContext; + + public List GetAllUsers() + { + return _databaseContext.Users.ToList(); + } + + public UsersDBO GetUserById(string userId) + { + return _databaseContext.Users + .Where(user => user.UserId == userId) + .FirstOrDefault(); + } + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.sln b/DotnetBoilerPlate/DotnetBoilerPlate.sln new file mode 100644 index 0000000..5811bc3 --- /dev/null +++ b/DotnetBoilerPlate/DotnetBoilerPlate.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34003.232 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetBoilerPlate.API", "DotnetBoilerPlate.API\DotnetBoilerPlate.API.csproj", "{1C10A534-DB66-494B-B797-55143C40C9D1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetBoilerPlate.DAL", "DotnetBoilerPlate.DAL\DotnetBoilerPlate.DAL.csproj", "{9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{37C6C65D-EB24-40A7-A954-0446B3D1511D}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C10A534-DB66-494B-B797-55143C40C9D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C10A534-DB66-494B-B797-55143C40C9D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C10A534-DB66-494B-B797-55143C40C9D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C10A534-DB66-494B-B797-55143C40C9D1}.Release|Any CPU.Build.0 = Release|Any CPU + {9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {52544ABA-43AE-4042-B5BF-D7287DD51EDD} + EndGlobalSection +EndGlobal diff --git a/docs/img/dotnet-run.png b/docs/img/dotnet-run.png new file mode 100644 index 0000000000000000000000000000000000000000..8e66c88eb471e30e838c09ae9658f98de605cbcf GIT binary patch literal 33605 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 literal 0 HcmV?d00001 diff --git a/docs/img/extensions.png b/docs/img/extensions.png new file mode 100644 index 0000000000000000000000000000000000000000..fbda72d0f0c3ce37ff4af04e0df1ca98074f2a25 GIT binary patch literal 60447 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 VY48JVd#zIJ`Sk>Z)*=i1T^O~s; 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 mE8~Xp;3h==e}C%mD{}Vs9-a`AIs|Upg&-{ Date: Tue, 21 Nov 2023 11:44:28 +0530 Subject: [PATCH 2/2] REST-243: Add new name for project and delete unnecessary files --- .gitignore | 2 +- .../DatabaseContext/SqlDatabaseContext.cs | 1897 ----------------- .../Models/CandidateExamsDBO.cs | 35 - .../Models/CompaniesDBO.cs | 63 - .../Models/CoursebatchesDBO.cs | 62 - .../Models/ExamsConfigDBO.cs | 27 - .../DotnetBoilerPlate.DAL/Models/ExamsDBO.cs | 90 - .../Models/GetCandidateExamsDBO.cs | 141 -- .../DotnetBoilerPlate.DAL/Models/GroupsDBO.cs | 34 - .../DotnetBoilerPlate.DAL/Models/LogsDBO.cs | 31 - .../Models/MarkDetailsDBO.cs | 38 - .../DotnetBoilerPlate.DAL/Models/MarksDBO.cs | 61 - .../Models/OnlineExamQuestionPapersDBO.cs | 94 - .../Models/OnlineExamSubmittedAnswersDBO.cs | 34 - .../Models/PrintDetailsDBO.cs | 33 - .../Models/QualificationsDBO.cs | 97 - .../Models/QuestiondetailsDBO.cs | 45 - .../Models/QuestionsDBO.cs | 74 - .../Models/SectionsDBO.cs | 25 - .../Models/ServicesDBO.cs | 78 - .../Models/StudentdetailsDBO.cs | 44 - .../Models/SubscribedTrainingsDBO.cs | 44 - .../Models/SubsectionsDBO.cs | 25 - .../Models/TestUserRegistrationdetailsDBO.cs | 10 - .../Models/ThemeTemplatesDBO.cs | 23 - .../Models/TrainingprovidersDBO.cs | 19 - .../.editorconfig | 0 .../BLL/Interfaces/IUsersBLL.cs | 6 +- .../DotnetFoundation.API}/BLL/UsersBLL.cs | 14 +- .../Controllers/UsersController.cs | 8 +- .../DotnetFoundation.API.csproj | 2 +- .../Helpers/AutoMappingProfile.cs | 2 +- .../Helpers/EnumHelper.cs | 2 +- .../Models/BaseResponse.cs | 2 +- .../DotnetFoundation.API}/Program.cs | 12 +- .../Properties/launchSettings.json | 0 .../appsettings.Development.json | 0 .../DotnetFoundation.API}/appsettings.json | 0 .../DatabaseContext/SqlDatabaseContext.cs | 182 ++ .../DotnetFoundation.DAL.csproj | 0 .../DotnetFoundation.DAL}/Models/UsersDBO.cs | 2 +- .../Repositories/Interfaces/IUsersRepo.cs | 4 +- .../Repositories/UsersRepo.cs | 8 +- .../DotnetFoundation.sln | 4 +- 44 files changed, 216 insertions(+), 3158 deletions(-) delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs delete mode 100644 DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs rename {DotnetBoilerPlate => DotnetFoundation}/.editorconfig (100%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/BLL/Interfaces/IUsersBLL.cs (64%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/BLL/UsersBLL.cs (92%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Controllers/UsersController.cs (90%) rename DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj => DotnetFoundation/DotnetFoundation.API/DotnetFoundation.API.csproj (93%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Helpers/AutoMappingProfile.cs (66%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Helpers/EnumHelper.cs (90%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Models/BaseResponse.cs (97%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Program.cs (94%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/Properties/launchSettings.json (100%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/appsettings.Development.json (100%) rename {DotnetBoilerPlate/DotnetBoilerPlate.API => DotnetFoundation/DotnetFoundation.API}/appsettings.json (100%) create mode 100644 DotnetFoundation/DotnetFoundation.DAL/DatabaseContext/SqlDatabaseContext.cs rename DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj => DotnetFoundation/DotnetFoundation.DAL/DotnetFoundation.DAL.csproj (100%) rename {DotnetBoilerPlate/DotnetBoilerPlate.DAL => DotnetFoundation/DotnetFoundation.DAL}/Models/UsersDBO.cs (98%) rename {DotnetBoilerPlate/DotnetBoilerPlate.DAL => DotnetFoundation/DotnetFoundation.DAL}/Repositories/Interfaces/IUsersRepo.cs (58%) rename {DotnetBoilerPlate/DotnetBoilerPlate.DAL => DotnetFoundation/DotnetFoundation.DAL}/Repositories/UsersRepo.cs (75%) rename DotnetBoilerPlate/DotnetBoilerPlate.sln => DotnetFoundation/DotnetFoundation.sln (81%) diff --git a/.gitignore b/.gitignore index c0a53e9..cca254b 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,7 @@ bld/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory -DotnetBoilerPlate/.vs +DotnetFoundation/.vs # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs deleted file mode 100644 index 175bfbe..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DatabaseContext/SqlDatabaseContext.cs +++ /dev/null @@ -1,1897 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using DotnetBoilerPlate.DAL.Models; - -namespace DotnetBoilerPlate.DAL.DatabaseContext -{ - public partial class SqlDatabaseContext : DbContext - { - public SqlDatabaseContext() - { - } - - public SqlDatabaseContext(DbContextOptions options) - : base(options) - { - } - - public DbSet CandidateExams { get; set; } - - public DbSet Companies { get; set; } - - public DbSet CourseBatches { get; set; } - - public DbSet Exams { get; set; } - - public DbSet ExamsConfigs { get; set; } - - public DbSet GetCandidateExams { get; set; } - - public DbSet Groups { get; set; } - - public DbSet Logs { get; set; } - - public DbSet Marks { get; set; } - - public DbSet MarkDetails { get; set; } - - public DbSet OnlineExamQuestionPapers { get; set; } - - public DbSet OnlineExamSubmittedAnswers { get; set; } - - public DbSet PrintDetails { get; set; } - - public DbSet Qualifications { get; set; } - - public DbSet Questions { get; set; } - - public DbSet QuestionDetails { get; set; } - - public DbSet Sections { get; set; } - - public DbSet Services { get; set; } - - public DbSet StudentDetails { get; set; } - - public DbSet SubscribedTrainings { get; set; } - - public DbSet Subsections { get; set; } - - public DbSet TestUserRegistrationDetails { get; set; } - - public DbSet ThemeTemplates { get; set; } - - public DbSet TrainingProviders { get; set; } - - public DbSet Users { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .UseCollation("latin1_swedish_ci") - .HasCharSet("latin1"); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.CandidateExamId).HasName("PRIMARY"); - - entity - .ToTable("candidate_exam") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.UserId }, "idx_ce_tpid_userid_examid"); - - entity.Property(e => e.CandidateExamId) - .HasMaxLength(36) - .HasColumnName("candidateexamid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.ExamName) - .HasMaxLength(50) - .HasColumnName("examname"); - entity.Property(e => e.ExamUniqCode) - .HasMaxLength(20) - .HasColumnName("examuniqcode"); - entity.Property(e => e.IsVisible).HasColumnName("isvisible"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.QuestionPaperId) - .HasMaxLength(36) - .HasColumnName("questionpaperid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - Exam running, 2 - Exam Completed, 3 - Deative") - .HasColumnName("status"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - entity.Property(e => e.UserName) - .HasMaxLength(100) - .HasColumnName("username"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.CompanyId).HasName("PRIMARY"); - - entity - .ToTable("company") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.CompanyId) - .HasMaxLength(36) - .HasColumnName("companyid"); - entity.Property(e => e.Comments) - .HasMaxLength(500) - .HasColumnName("comments"); - entity.Property(e => e.CompanyAddress) - .HasMaxLength(100) - .HasColumnName("companyaddress"); - entity.Property(e => e.CompanyLogo) - .HasMaxLength(100) - .HasComment("Path of company Logo") - .HasColumnName("companylogo"); - entity.Property(e => e.CompanyName) - .HasMaxLength(500) - .HasColumnName("companyname"); - entity.Property(e => e.CompanyType) - .HasComment("0-Training center, 1=Campus Placement, 2-for main question bank") - .HasColumnName("companytype"); - entity.Property(e => e.CompanyUrl) - .HasMaxLength(100) - .HasColumnName("companyurl"); - entity.Property(e => e.ContactName) - .HasMaxLength(100) - .HasColumnName("contactname"); - entity.Property(e => e.ContactNumber) - .HasMaxLength(20) - .HasColumnName("contactnumber"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ExamDate).HasDefaultValueSql("'2015-11-08'"); - entity.Property(e => e.ExamTime) - .HasDefaultValueSql("'09:30:00'") - .HasColumnType("time"); - entity.Property(e => e.Facebook) - .HasMaxLength(50) - .HasColumnName("facebook"); - entity.Property(e => e.IsShareDb) - .HasDefaultValueSql("'0'") - .HasComment("0 - Don't share db, 1 - share db") - .HasColumnName("IsShareDB"); - entity.Property(e => e.LinkedIn) - .HasMaxLength(50) - .HasColumnName("linkedin"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.ThemeId) - .HasDefaultValueSql("'0'") - .HasComment("references themetemplates.themetemplateid") - .HasColumnName("themeid"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UniqueCode) - .HasMaxLength(15) - .HasColumnName("uniquecode"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.CourseBatchId).HasName("PRIMARY"); - - entity - .ToTable("coursebatch") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => e.CourseId, "FK_coursebatch"); - - entity.Property(e => e.CourseBatchId) - .HasMaxLength(36) - .HasColumnName("coursebatchid"); - entity.Property(e => e.Amount).HasColumnName("amount"); - entity.Property(e => e.ClassHours).HasColumnName("classhours"); - entity.Property(e => e.Coordinator) - .HasMaxLength(36) - .HasComment("employeeid") - .HasColumnName("coordinator"); - entity.Property(e => e.CourseId) - .HasMaxLength(36) - .HasColumnName("courseid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.Duration).HasColumnName("duration"); - entity.Property(e => e.EndDate) - .HasColumnType("datetime") - .HasColumnName("enddate"); - entity.Property(e => e.LabHours).HasColumnName("labhours"); - entity.Property(e => e.MaxNumber).HasColumnName("maxnumber"); - entity.Property(e => e.MinNumber).HasColumnName("minnumber"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Name) - .HasMaxLength(200) - .HasColumnName("name"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.StartDate) - .HasColumnType("datetime") - .HasColumnName("startdate"); - entity.Property(e => e.StartTime) - .HasMaxLength(8) - .HasColumnName("starttime"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TrainingBranch) - .HasMaxLength(100) - .HasColumnName("trainingbranch"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.ExamId).HasName("PRIMARY"); - - entity - .ToTable("exams") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => e.BatchId, "FK_exams"); - - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.BatchId) - .HasMaxLength(36) - .HasColumnName("batchid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ExamDate).HasColumnName("examdate"); - entity.Property(e => e.ExamDuration) - .HasMaxLength(10) - .HasDefaultValueSql("'0'") - .HasColumnName("examduration"); - entity.Property(e => e.ExamName) - .HasMaxLength(100) - .HasColumnName("examname"); - entity.Property(e => e.ExamTime) - .HasColumnType("time") - .HasColumnName("examtime"); - entity.Property(e => e.ExamType) - .HasDefaultValueSql("'1'") - .HasComment("1-Free Exam 2-Paid Exam 3- Course/Batch Exam") - .HasColumnName("examtype"); - entity.Property(e => e.ExamUniqCode) - .HasMaxLength(20) - .HasColumnName("examuniqcode"); - entity.Property(e => e.IsCourseExam) - .HasDefaultValueSql("'1'") - .HasColumnName("iscourseexam"); - entity.Property(e => e.IsOnline) - .HasDefaultValueSql("'0'") - .HasColumnName("isonline"); - entity.Property(e => e.IsVisible).HasColumnName("isvisible"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.PrecedingExamIds) - .HasMaxLength(400) - .HasComment("List of examids that are to be cleared to write this exam") - .HasColumnName("precedingexamids"); - entity.Property(e => e.QuestionPaperId) - .HasMaxLength(36) - .HasColumnName("questionpaperid"); - entity.Property(e => e.QuestionPaperIds) - .HasMaxLength(100) - .HasComment("Using one questionpaperid, Provision for 5 comma separated questionpaperids ex:OQN-20151029024904") - .HasColumnName("questionpaperids"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.ServiceId) - .HasMaxLength(36) - .HasColumnName("serviceid"); - entity.Property(e => e.ShowDescription) - .HasDefaultValueSql("'0'") - .HasColumnName("showdescription"); - entity.Property(e => e.ShowHint) - .HasDefaultValueSql("'0'") - .HasColumnName("showhint"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubTopic1) - .HasMaxLength(20) - .HasColumnName("subtopic1"); - entity.Property(e => e.SubTopic2) - .HasMaxLength(20) - .HasColumnName("subtopic2"); - entity.Property(e => e.SubTopic3) - .HasMaxLength(20) - .HasColumnName("subtopic3"); - entity.Property(e => e.SubTopic4) - .HasMaxLength(20) - .HasColumnName("subtopic4"); - entity.Property(e => e.SubTopic5) - .HasMaxLength(20) - .HasColumnName("subtopic5"); - entity.Property(e => e.SubTopic6) - .HasMaxLength(20) - .HasColumnName("subtopic6"); - entity.Property(e => e.TotalCutOffMarks) - .HasMaxLength(50) - .HasColumnName("totalcutoffmarks"); - entity.Property(e => e.TotalMarksExamined).HasColumnName("totalmarksexamined"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => new { e.ConfigType, e.ExamName }) - .HasName("PRIMARY") - .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0 }); - - entity.ToTable("exams_config"); - - entity.Property(e => e.ConfigType).HasColumnName("config_type"); - entity.Property(e => e.ExamName) - .HasMaxLength(100) - .HasDefaultValueSql("''") - .HasColumnName("exam_name"); - entity.Property(e => e.ExamCutoffMarks) - .HasDefaultValueSql("'0'") - .HasColumnName("exam_cutoff_marks"); - entity.Property(e => e.ExamDuration).HasColumnName("exam_duration"); - entity.Property(e => e.ExamOrder).HasColumnName("exam_order"); - entity.Property(e => e.IsOmr).HasColumnName("is_omr"); - entity.Property(e => e.PrecedingExamName) - .HasMaxLength(400) - .HasColumnName("preceding_exam_name"); - entity.Property(e => e.SectionDetails) - .HasMaxLength(1000) - .HasColumnName("section_details"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1-Active 2-Inactive 3-Deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionDetails) - .HasColumnType("text") - .HasColumnName("subsection_details"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToView("getcandidateexam"); - - entity.Property(e => e.Address1City) - .HasMaxLength(50) - .HasColumnName("address1_city") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address1Country) - .HasMaxLength(50) - .HasColumnName("address1_country") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address1Pincode) - .HasMaxLength(20) - .HasColumnName("address1_pincode") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address1State) - .HasMaxLength(50) - .HasColumnName("address1_state") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address1Street1) - .HasMaxLength(50) - .HasColumnName("address1_street1") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address1Street2) - .HasMaxLength(50) - .HasColumnName("address1_street2") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2City) - .HasMaxLength(50) - .HasColumnName("address2_city") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2Country) - .HasMaxLength(50) - .HasColumnName("address2_country") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2Pincode) - .HasMaxLength(20) - .HasColumnName("address2_pincode") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2State) - .HasMaxLength(50) - .HasColumnName("address2_state") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2Street1) - .HasMaxLength(50) - .HasColumnName("address2_street1") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Address2Street2) - .HasMaxLength(100) - .HasColumnName("address2_street2") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.BatchId) - .HasMaxLength(36) - .HasColumnName("batchid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.CandidateExamId) - .HasMaxLength(36) - .HasColumnName("candidateexamid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.DateOfBirth) - .HasColumnType("datetime") - .HasColumnName("dateofbirth"); - entity.Property(e => e.EmailAddress) - .HasMaxLength(50) - .HasColumnName("emailaddress") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.EmergencyContactNumber) - .HasMaxLength(20) - .HasColumnName("emergencycontactnumber") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamDate).HasColumnName("examdate"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamName) - .HasMaxLength(100) - .HasColumnName("examname") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamsCreatedOn) - .HasColumnType("datetime") - .HasColumnName("exams_createdon"); - entity.Property(e => e.ExamsExamId) - .HasMaxLength(36) - .HasColumnName("exams_examid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamsExamUniqCode) - .HasMaxLength(20) - .HasColumnName("exams_examuniqcode") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamsModifiedBy) - .HasMaxLength(36) - .HasColumnName("exams_modifiedby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamsModifiedOn) - .HasColumnType("datetime") - .HasColumnName("exams_modifiedon"); - entity.Property(e => e.ExamsReatedBy) - .HasMaxLength(36) - .HasColumnName("exams_reatedby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ExamsStatus) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("exams_status"); - entity.Property(e => e.ExamTime) - .HasColumnType("time") - .HasColumnName("examtime"); - entity.Property(e => e.ExamType) - .HasDefaultValueSql("'1'") - .HasComment("1-Free Exam 2-Paid Exam 3- Course/Batch Exam") - .HasColumnName("examtype"); - entity.Property(e => e.ExamUniqCode) - .HasMaxLength(20) - .HasColumnName("examuniqcode") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.FacebookId) - .HasMaxLength(50) - .HasColumnName("facebookid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.FirstName) - .HasMaxLength(50) - .HasColumnName("firstname") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Gender).HasColumnName("gender"); - entity.Property(e => e.IsCourseExam) - .HasDefaultValueSql("'1'") - .HasColumnName("iscourseexam"); - entity.Property(e => e.LastName) - .HasMaxLength(50) - .HasColumnName("lastname") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.LinkedinId) - .HasMaxLength(50) - .HasColumnName("linkedinid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.MobileNumber) - .HasMaxLength(20) - .HasColumnName("mobilenumber") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Password) - .HasMaxLength(20) - .HasColumnName("password") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.RegistrationNumber) - .HasMaxLength(20) - .HasColumnName("registrationumber") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Salutation) - .HasMaxLength(5) - .IsFixedLength() - .HasColumnName("salutation") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - Exam running, 2 - Exam Completed, 3 - Deative") - .HasColumnName("status"); - entity.Property(e => e.ThumbImpression) - .HasMaxLength(100) - .HasComment("Path of thumb impression") - .HasColumnName("thumbimpression") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.TraineePhoto) - .HasMaxLength(100) - .HasComment("Path of trainee photo") - .HasColumnName("traineephoto") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UserDisplayId) - .HasMaxLength(20) - .HasColumnName("userdisplayid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UserName) - .HasMaxLength(100) - .HasColumnName("username") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UsersCreatedBy) - .HasMaxLength(36) - .HasColumnName("users_createdby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UsersCreatedOn) - .HasColumnType("datetime") - .HasColumnName("users_createdon"); - entity.Property(e => e.UsersModifiedBy) - .HasMaxLength(36) - .HasColumnName("users_modifiedby") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UsersModifiedOn) - .HasColumnType("datetime") - .HasColumnName("users_modifiedon"); - entity.Property(e => e.UsersStatus) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9") - .HasColumnName("users_status"); - entity.Property(e => e.UsersUserId) - .HasMaxLength(36) - .HasColumnName("users_userid") - .UseCollation("utf8_general_ci") - .HasCharSet("utf8"); - entity.Property(e => e.UserType) - .HasComment("0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider") - .HasColumnName("usertype"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.GroupDisplayId).HasName("PRIMARY"); - - entity - .ToTable("groups") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.GroupDisplayId).HasColumnName("groupdisplayid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.GroupDescription) - .HasComment("Passage for comprehension questions") - .HasColumnType("text") - .HasColumnName("groupdescription"); - entity.Property(e => e.GroupId) - .HasMaxLength(36) - .HasColumnName("groupid"); - entity.Property(e => e.ImagePath) - .HasMaxLength(100) - .HasColumnName("imagepath"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasColumnName("subsectionid"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.LogId).HasName("PRIMARY"); - - entity.ToTable("logs"); - - entity.Property(e => e.LogId) - .HasMaxLength(36) - .HasColumnName("logid"); - entity.Property(e => e.Action) - .HasColumnType("text") - .HasColumnName("action"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.EmailAddress) - .HasMaxLength(50) - .HasColumnName("emailaddress"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.PageName) - .HasMaxLength(500) - .HasColumnName("pagename"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserName) - .HasMaxLength(100) - .HasColumnName("username"); - entity.Property(e => e.UserType).HasColumnName("usertype"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("marks") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => e.UserId, "FK_marks"); - - entity.Property(e => e.CourseId) - .HasMaxLength(36) - .HasColumnName("courseid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.CutOffMarks) - .HasMaxLength(50) - .HasColumnName("cutoffmarks"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.ExamWrittenDate) - .HasMaxLength(20) - .HasColumnName("examwrittendate"); - entity.Property(e => e.Grade) - .HasMaxLength(1) - .IsFixedLength() - .HasColumnName("grade"); - entity.Property(e => e.IsReportSent).HasColumnName("isreportsent"); - entity.Property(e => e.MarksId) - .HasMaxLength(36) - .HasColumnName("marksid"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.NegativeMarksSecured).HasColumnName("negativemarkssecured"); - entity.Property(e => e.PositiveMarksSecured).HasColumnName("positivemarkssecured"); - entity.Property(e => e.QuestionPaperId) - .HasMaxLength(36) - .HasColumnName("questionpaperid"); - entity.Property(e => e.ReportDate) - .HasColumnType("datetime") - .HasColumnName("reportdate"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TimeRelapsed) - .HasMaxLength(4) - .HasColumnName("timerelapsed"); - entity.Property(e => e.TotalMarksExamined).HasColumnName("totalmarksexamined"); - entity.Property(e => e.TotalMarksSecured).HasColumnName("totalmarkssecured"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("markdetails") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.ActualMarks).HasColumnName("actualmarks"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.Markdetailsid) - .HasMaxLength(36) - .HasColumnName("markdetailsid"); - entity.Property(e => e.MarksId) - .HasMaxLength(36) - .HasComment("References marks.marksid") - .HasColumnName("marksid"); - entity.Property(e => e.MarksSecured).HasColumnName("markssecured"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.NegativeMarks).HasColumnName("negativemarks"); - entity.Property(e => e.NumberOfQuestions) - .HasMaxLength(50) - .HasColumnName("numberofquestions"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasColumnName("subsectionid"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => new { e.SequenceNumber, e.QuestionPaperId, e.ExamId }) - .HasName("PRIMARY") - .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0, 0 }); - - entity - .ToTable("onlineexamquestionpapers") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.QuestionPaperId }, "onlineexamquestionpapers_tpid_examid_qpid"); - - entity.Property(e => e.SequenceNumber).HasColumnName("sequencenumber"); - entity.Property(e => e.QuestionPaperId).HasColumnName("questionpaperid"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("examid"); - entity.Property(e => e.Answer) - .HasMaxLength(1) - .HasComment("It contains one of four opions i.e a,b,c,d") - .HasColumnName("answer"); - entity.Property(e => e.AnswerFilePath) - .HasMaxLength(100) - .HasColumnName("answerfilepath"); - entity.Property(e => e.AnswerFormat) - .HasMaxLength(30) - .HasColumnName("answerformat"); - entity.Property(e => e.Complexity).HasColumnName("complexity"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.DescriptiveAnswer) - .HasColumnType("text") - .HasColumnName("descriptiveanswer"); - entity.Property(e => e.DescriptiveAnswerExplanation) - .HasColumnType("text") - .HasColumnName("descriptiveanswerexplanation"); - entity.Property(e => e.ExamOrCourseId) - .HasMaxLength(36) - .HasColumnName("examorcourseid"); - entity.Property(e => e.GroupDescription) - .HasComment("For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) ") - .HasColumnType("text") - .HasColumnName("groupdescription"); - entity.Property(e => e.GroupDisplayId).HasColumnName("groupdisplayid"); - entity.Property(e => e.GroupId) - .HasMaxLength(36) - .HasColumnName("groupid"); - entity.Property(e => e.ImagePath) - .HasMaxLength(100) - .HasColumnName("imagepath"); - entity.Property(e => e.IsOmr) - .HasComment("1 - the questionis of OMR type, 2- the questionis non OMR type") - .HasColumnName("IsOMR"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.NegativeMarksPerQuestion).HasColumnName("negativemarksperquestion"); - entity.Property(e => e.Option1) - .HasMaxLength(250) - .HasColumnName("option1"); - entity.Property(e => e.Option1FilePath) - .HasMaxLength(100) - .HasColumnName("option1filepath"); - entity.Property(e => e.Option2) - .HasMaxLength(250) - .HasColumnName("option2"); - entity.Property(e => e.Option2FilePath) - .HasMaxLength(100) - .HasColumnName("option2filepath"); - entity.Property(e => e.Option3) - .HasMaxLength(250) - .HasColumnName("option3"); - entity.Property(e => e.Option3FilePath) - .HasMaxLength(100) - .HasColumnName("option3filepath"); - entity.Property(e => e.Option4) - .HasMaxLength(250) - .HasColumnName("option4"); - entity.Property(e => e.Option4FilePath) - .HasMaxLength(100) - .HasColumnName("option4filepath"); - entity.Property(e => e.PositiveMarksPerQuestion).HasColumnName("positivemarksperquestion"); - entity.Property(e => e.QuestionDescription) - .HasColumnType("text") - .HasColumnName("questiondescription"); - entity.Property(e => e.QuestionFilePath) - .HasMaxLength(100) - .HasColumnName("questionfilepath"); - entity.Property(e => e.QuestionHint) - .HasColumnType("text") - .HasColumnName("questionhint"); - entity.Property(e => e.QuestionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("questionid"); - entity.Property(e => e.SectionDescription) - .HasMaxLength(200) - .HasDefaultValueSql("''") - .HasColumnName("sectiondescription"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("sectionid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionDescription) - .HasMaxLength(200) - .HasDefaultValueSql("''") - .HasColumnName("subsectiondescription"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("subsectionid"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("onlineexamsubmittedanswers") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.CorrectAnswer) - .HasMaxLength(100) - .HasColumnName("correctanswer"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.NegativeMarks) - .HasColumnType("float(5,2)") - .HasColumnName("negativemarks"); - entity.Property(e => e.ObtainedMarks) - .HasColumnType("float(5,2)") - .HasColumnName("obtainedmarks"); - entity.Property(e => e.PositiveMarks) - .HasColumnType("float(5,2)") - .HasColumnName("positivemarks"); - entity.Property(e => e.QuestionId) - .HasMaxLength(36) - .HasColumnName("questionid"); - entity.Property(e => e.QuestionNumber).HasColumnName("questionnumber"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.SubmittedAnswer) - .HasMaxLength(50) - .HasColumnName("submittedanswer"); - entity.Property(e => e.SubmittedTime) - .HasColumnType("time") - .HasColumnName("submittedtime"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasColumnName("subsectionid"); - entity.Property(e => e.TableName) - .HasMaxLength(100) - .HasColumnName("tablename"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("printdetails") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.CourseId) - .HasMaxLength(36) - .HasColumnName("courseid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.Instructions) - .HasColumnType("text") - .HasColumnName("instructions"); - entity.Property(e => e.IsOnline) - .HasDefaultValueSql("'0'") - .HasColumnName("isonline"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.PrintDetailId) - .HasMaxLength(36) - .HasColumnName("printdetailid"); - entity.Property(e => e.QuestionPaperId) - .HasMaxLength(36) - .HasColumnName("questionpaperid"); - entity.Property(e => e.QuestionPaperPath) - .HasMaxLength(100) - .HasColumnName("questionpaperpath"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.QualificationId).HasName("PRIMARY"); - - entity - .ToTable("qualifications") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => e.UserId, "FK_qualifications"); - - entity.Property(e => e.QualificationId) - .HasMaxLength(36) - .HasColumnName("qualificationid"); - entity.Property(e => e.BoardUniversity) - .HasMaxLength(50) - .HasColumnName("board_university"); - entity.Property(e => e.City) - .HasMaxLength(50) - .HasColumnName("city"); - entity.Property(e => e.CompleteStatus) - .HasComment("1-passed 2- failed 3- discontinued") - .HasColumnName("completestatus"); - entity.Property(e => e.Country) - .HasMaxLength(50) - .HasColumnName("country"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.MarksSecured).HasColumnName("markssecured"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.PassedOn).HasColumnName("passedon"); - entity.Property(e => e.Percentage).HasColumnName("percentage"); - entity.Property(e => e.Pincode) - .HasMaxLength(20) - .HasColumnName("pincode"); - entity.Property(e => e.QualificationLevel) - .HasComment("1 - School 2 - Intermediate 3 - Graduation 4 - Post Graduation") - .HasColumnName("qualification_level"); - entity.Property(e => e.QualificationName) - .HasMaxLength(50) - .HasColumnName("qualificationname"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.SchoolCollageName) - .HasMaxLength(200) - .HasColumnName("school_collagename"); - entity.Property(e => e.Specialization) - .HasMaxLength(50) - .HasColumnName("specialization"); - entity.Property(e => e.State) - .HasMaxLength(50) - .HasColumnName("state"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.Street1) - .HasMaxLength(50) - .HasColumnName("street1"); - entity.Property(e => e.Street2) - .HasMaxLength(50) - .HasColumnName("street2"); - entity.Property(e => e.TotalMarks).HasColumnName("totalmarks"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => new { e.TrainingProviderId, e.SectionId, e.SubsectionId, e.QuestionId }) - .HasName("PRIMARY") - .HasAnnotation("MySql:IndexPrefixLength", new[] { 0, 0, 0, 0 }); - - entity - .ToTable("questions") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("sectionid"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("subsectionid"); - entity.Property(e => e.QuestionId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("questionid"); - entity.Property(e => e.Answer) - .HasMaxLength(1) - .HasComment("It contains one of four opions i.e a,b,c,d") - .HasColumnName("answer"); - entity.Property(e => e.AnswerFilePath) - .HasMaxLength(100) - .HasColumnName("answerfilepath"); - entity.Property(e => e.AnswerFormat) - .HasMaxLength(30) - .HasColumnName("answerformat"); - entity.Property(e => e.Complexity).HasColumnName("complexity"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.DescriptiveAnswer) - .HasColumnType("text") - .HasColumnName("descriptiveanswer"); - entity.Property(e => e.DescriptiveAnswerExplanation) - .HasColumnType("text") - .HasColumnName("descriptiveanswerexplanation"); - entity.Property(e => e.ExamorCourseId).HasMaxLength(36); - entity.Property(e => e.GroupId) - .HasMaxLength(36) - .HasComment("For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) ") - .HasColumnName("groupid"); - entity.Property(e => e.IsOmr) - .HasComment("1 - the questionis of OMR type, 2- the questionis non OMR type") - .HasColumnName("IsOMR"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Option1) - .HasMaxLength(250) - .HasColumnName("option1"); - entity.Property(e => e.Option1FilePath) - .HasMaxLength(100) - .HasColumnName("option1filepath"); - entity.Property(e => e.Option2) - .HasMaxLength(250) - .HasColumnName("option2"); - entity.Property(e => e.Option2FilePath) - .HasMaxLength(100) - .HasColumnName("option2filepath"); - entity.Property(e => e.Option3) - .HasMaxLength(250) - .HasColumnName("option3"); - entity.Property(e => e.Option3FilePath) - .HasMaxLength(100) - .HasColumnName("option3filepath"); - entity.Property(e => e.Option4) - .HasMaxLength(250) - .HasColumnName("option4"); - entity.Property(e => e.Option4FilePath) - .HasMaxLength(100) - .HasColumnName("option4filepath"); - entity.Property(e => e.QuestionDescription) - .HasColumnType("text") - .HasColumnName("questiondescription"); - entity.Property(e => e.QuestionFilePath) - .HasMaxLength(100) - .HasColumnName("questionfilepath"); - entity.Property(e => e.QuestionHint) - .HasColumnType("text") - .HasColumnName("questionhint"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("questiondetails") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.HasIndex(e => new { e.TrainingProviderId, e.ExamId, e.QuestionPaperId }, "questiondetails_tpid_examid_qpid"); - - entity.Property(e => e.CourseId) - .HasMaxLength(36) - .HasColumnName("courseid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.CutOffMarks) - .HasMaxLength(50) - .HasColumnName("cutoffmarks"); - entity.Property(e => e.ExamId) - .HasMaxLength(36) - .HasColumnName("examid"); - entity.Property(e => e.GroupCount).HasColumnName("groupcount"); - entity.Property(e => e.IsOmr).HasColumnName("isomr"); - entity.Property(e => e.IsOnline) - .HasDefaultValueSql("'0'") - .HasColumnName("isonline"); - entity.Property(e => e.MarksExamined) - .HasMaxLength(50) - .HasColumnName("marksexamined"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.NegativeMarks).HasColumnName("negativemarks"); - entity.Property(e => e.NumberOfQuestions) - .HasMaxLength(50) - .HasColumnName("numberofquestions"); - entity.Property(e => e.QuestionDetailId) - .HasMaxLength(36) - .HasColumnName("questiondetailid"); - entity.Property(e => e.QuestionPaperId) - .HasMaxLength(36) - .HasColumnName("questionpaperid"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasColumnName("subsectionid"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.SectionId).HasName("PRIMARY"); - - entity - .ToTable("sections") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.SectionDescription) - .HasMaxLength(100) - .HasColumnName("sectiondescription"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.Suggestions) - .HasMaxLength(400) - .HasColumnName("suggestions"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.ServiceId).HasName("PRIMARY"); - - entity - .ToTable("services") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.ServiceId) - .HasMaxLength(36) - .HasColumnName("serviceid"); - entity.Property(e => e.Amount) - .HasComment("1-FreeExam 0-PaidExam") - .HasColumnName("amount"); - entity.Property(e => e.Category) - .HasMaxLength(50) - .HasColumnName("category"); - entity.Property(e => e.ChildServiceId) - .HasComment("stores multiple serviceids seperated with comma") - .HasColumnType("text") - .HasColumnName("childserviceid"); - entity.Property(e => e.ClassHours).HasColumnName("classhours"); - entity.Property(e => e.CourseDuration).HasColumnName("courseduration"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.Description) - .HasMaxLength(200) - .HasColumnName("description"); - entity.Property(e => e.Faculty) - .HasMaxLength(36) - .HasComment("employeeid") - .HasColumnName("faculty"); - entity.Property(e => e.Fees).HasColumnName("fees"); - entity.Property(e => e.IsExam).HasComment("2- exam 1- course"); - entity.Property(e => e.LabHours).HasColumnName("labhours"); - entity.Property(e => e.MaxNumber).HasColumnName("maxnumber"); - entity.Property(e => e.MinNumber).HasColumnName("minnumber"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.ServiceName) - .HasMaxLength(200) - .HasColumnName("servicename"); - entity.Property(e => e.ServiceType) - .HasComment("1- single course 2- multiple coureses") - .HasColumnName("servicetype"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("studentdetails") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.Branch) - .HasMaxLength(50) - .HasColumnName("branch"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.EmailId) - .HasMaxLength(50) - .HasColumnName("emailid"); - entity.Property(e => e.FirstYearBackLogs).HasColumnName("firstyearbacklogs"); - entity.Property(e => e.FirstYearPercentage).HasColumnName("firstyearpercentage"); - entity.Property(e => e.HallTicketNumber) - .HasMaxLength(20) - .HasComment("hall ticket number is unique for every candidate") - .HasColumnName("hallticketnumber"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Name) - .HasMaxLength(100) - .HasColumnName("name"); - entity.Property(e => e.OverallPercentage).HasColumnName("overallpercentage"); - entity.Property(e => e.SecondYearBackLogs).HasColumnName("secondyearbacklogs"); - entity.Property(e => e.SecondYearPercentage).HasColumnName("secondyearpercentage"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.ThirdYearBackLogs).HasColumnName("thirdyearbacklogs"); - entity.Property(e => e.ThirdYearPercentage).HasColumnName("thirdyearpercentage"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasDefaultValueSql("''") - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.TrainingId).HasName("PRIMARY"); - - entity - .ToTable("subscribed_training") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.TrainingId) - .HasMaxLength(36) - .HasColumnName("trainingid"); - entity.Property(e => e.Amount).HasColumnName("amount"); - entity.Property(e => e.BatchId) - .HasColumnType("text") - .HasColumnName("batchid"); - entity.Property(e => e.CourseId) - .HasMaxLength(36) - .HasComment("services id for course") - .HasColumnName("courseid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.SubsectionId).HasName("PRIMARY"); - - entity - .ToTable("subsections") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.SubsectionId) - .HasMaxLength(36) - .HasColumnName("subsectionid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.SectionId) - .HasMaxLength(36) - .HasColumnName("sectionid"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.SubsectionDescription) - .HasMaxLength(100) - .HasColumnName("subsectiondescription"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - }); - - modelBuilder.Entity(entity => - { - entity - .HasNoKey() - .ToTable("test__user_registrationdetails") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.FailedDbReason) - .HasMaxLength(2000) - .HasColumnName("failed_db_reason"); - entity.Property(e => e.HtNo) - .HasMaxLength(50) - .HasColumnName("htno"); - entity.Property(e => e.InsertStmt) - .HasColumnType("text") - .HasColumnName("insert_stmt"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.ThemeTemplateId).HasName("PRIMARY"); - - entity - .ToTable("themetemplates") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.ThemeTemplateId).HasColumnName("themetemplateid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - entity.Property(e => e.ThemeTemplateName) - .HasMaxLength(100) - .HasColumnName("themetemplatename"); - entity.Property(e => e.ThemeTemplatePath) - .HasMaxLength(100) - .HasColumnName("themetemplatepath"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.TrainingProviderId).HasName("PRIMARY"); - - entity - .ToTable("trainingprovider") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted") - .HasColumnName("status"); - }); - - modelBuilder.Entity(entity => - { - entity.HasKey(e => e.UserId).HasName("PRIMARY"); - - entity - .ToTable("users") - .HasCharSet("utf8") - .UseCollation("utf8_general_ci"); - - entity.Property(e => e.UserId) - .HasMaxLength(36) - .HasColumnName("userid"); - entity.Property(e => e.Address1City) - .HasMaxLength(50) - .HasColumnName("address1_city"); - entity.Property(e => e.Address1Country) - .HasMaxLength(50) - .HasColumnName("address1_country"); - entity.Property(e => e.Address1Pincode) - .HasMaxLength(20) - .HasColumnName("address1_pincode"); - entity.Property(e => e.Address1State) - .HasMaxLength(50) - .HasColumnName("address1_state"); - entity.Property(e => e.Address1Street1) - .HasMaxLength(50) - .HasColumnName("address1_street1"); - entity.Property(e => e.Address1Street2) - .HasMaxLength(50) - .HasColumnName("address1_street2"); - entity.Property(e => e.Address2City) - .HasMaxLength(50) - .HasColumnName("address2_city"); - entity.Property(e => e.Address2Country) - .HasMaxLength(50) - .HasColumnName("address2_country"); - entity.Property(e => e.Address2Pincode) - .HasMaxLength(20) - .HasColumnName("address2_pincode"); - entity.Property(e => e.Address2State) - .HasMaxLength(50) - .HasColumnName("address2_state"); - entity.Property(e => e.Address2Street1) - .HasMaxLength(50) - .HasColumnName("address2_street1"); - entity.Property(e => e.Address2Street2) - .HasMaxLength(100) - .HasColumnName("address2_street2"); - entity.Property(e => e.CandidateComments) - .HasMaxLength(500) - .HasColumnName("candidatecomments"); - entity.Property(e => e.Comments) - .HasMaxLength(500) - .HasColumnName("comments"); - entity.Property(e => e.CreatedBy) - .HasMaxLength(36) - .HasColumnName("createdby"); - entity.Property(e => e.CreatedOn) - .HasColumnType("datetime") - .HasColumnName("createdon"); - entity.Property(e => e.DateOfBirth) - .HasColumnType("datetime") - .HasColumnName("dateofbirth"); - entity.Property(e => e.EmailAddress) - .HasMaxLength(50) - .HasColumnName("emailaddress"); - entity.Property(e => e.EmergencyContactNumber) - .HasMaxLength(20) - .HasColumnName("emergencycontactnumber"); - entity.Property(e => e.FacebookId) - .HasMaxLength(50) - .HasColumnName("facebookid"); - entity.Property(e => e.Features) - .HasColumnType("text") - .HasColumnName("features"); - entity.Property(e => e.FingerPrintValue) - .HasMaxLength(100) - .HasComment("Path of finger print") - .HasColumnName("fingerprintvalue"); - entity.Property(e => e.FirstName) - .HasMaxLength(50) - .HasColumnName("firstname"); - entity.Property(e => e.Gender).HasColumnName("gender"); - entity.Property(e => e.HallTicket) - .HasMaxLength(20) - .HasColumnName("hallticket"); - entity.Property(e => e.IsAcceptedTermsAndConditions).HasColumnName("isacceptedtermsandconditions"); - entity.Property(e => e.LastName) - .HasMaxLength(50) - .HasColumnName("lastname"); - entity.Property(e => e.LinkedinId) - .HasMaxLength(50) - .HasColumnName("linkedinid"); - entity.Property(e => e.MobileNumber) - .HasMaxLength(20) - .HasColumnName("mobilenumber"); - entity.Property(e => e.ModifiedBy) - .HasMaxLength(36) - .HasColumnName("modifiedby"); - entity.Property(e => e.ModifiedOn) - .HasColumnType("datetime") - .HasColumnName("modifiedon"); - entity.Property(e => e.Password) - .HasMaxLength(20) - .HasColumnName("password"); - entity.Property(e => e.ProfilePicPath) - .HasMaxLength(100) - .HasComment("Path of profile picture") - .HasColumnName("profilepicpath"); - entity.Property(e => e.QuestionPaperSetNumber).HasColumnName("questionpapersetnumber"); - entity.Property(e => e.RegistrationNumber) - .HasMaxLength(20) - .HasColumnName("registrationumber"); - entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); - entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); - entity.Property(e => e.ResInt1).HasColumnName("res_int1"); - entity.Property(e => e.ResInt2).HasColumnName("res_int2"); - entity.Property(e => e.ResString1) - .HasMaxLength(100) - .HasColumnName("res_string1"); - entity.Property(e => e.ResString2) - .HasMaxLength(100) - .HasColumnName("res_string2"); - entity.Property(e => e.Salutation) - .HasMaxLength(5) - .IsFixedLength() - .HasColumnName("salutation"); - entity.Property(e => e.Status) - .HasDefaultValueSql("'1'") - .HasComment("1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9") - .HasColumnName("status"); - entity.Property(e => e.ThumbImpression) - .HasMaxLength(100) - .HasComment("Path of thumb impression") - .HasColumnName("thumbimpression"); - entity.Property(e => e.TraineePhoto) - .HasMaxLength(100) - .HasComment("Path of trainee photo") - .HasColumnName("traineephoto"); - entity.Property(e => e.TrainingProviderId) - .HasMaxLength(36) - .HasColumnName("trainingproviderid"); - entity.Property(e => e.UnSubscribe).HasColumnName("unsubscribe"); - entity.Property(e => e.UserDisplayId) - .HasMaxLength(20) - .HasColumnName("userdisplayid"); - entity.Property(e => e.UserType) - .HasComment("0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider") - .HasColumnName("usertype"); - }); - - OnModelCreatingPartial(modelBuilder); - } - - partial void OnModelCreatingPartial(ModelBuilder modelBuilder); - } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs deleted file mode 100644 index 7a0515f..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CandidateExamsDBO.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class CandidateExamsDBO -{ - public string CandidateExamId { get; set; } = null!; - - public string? ExamId { get; set; } - - public string? UserId { get; set; } - - public string? ExamName { get; set; } - - public string? UserName { get; set; } - - public string? ExamUniqCode { get; set; } - - public string? QuestionPaperId { get; set; } - - public bool? IsVisible { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - Exam running, 2 - Exam Completed, 3 - Deative - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs deleted file mode 100644 index 0e3ea0f..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CompaniesDBO.cs +++ /dev/null @@ -1,63 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class CompaniesDBO -{ - public string CompanyId { get; set; } = null!; - - /// - /// 0-Training center, 1=Campus Placement, 2-for main question bank - /// - public int? CompanyType { get; set; } - - public string? UniqueCode { get; set; } - - public string? TrainingProviderId { get; set; } - - public string? CompanyName { get; set; } - - public string? ContactName { get; set; } - - public string? ContactNumber { get; set; } - - public string? CompanyUrl { get; set; } - - public string? LinkedIn { get; set; } - - public string? Facebook { get; set; } - - /// - /// Path of company Logo - /// - public string? CompanyLogo { get; set; } - - public string? CompanyAddress { get; set; } - - /// - /// references themetemplates.themetemplateid - /// - public sbyte? ThemeId { get; set; } - - /// - /// 0 - Don't share db, 1 - share db - /// - public sbyte? IsShareDb { get; set; } - - public DateOnly? ExamDate { get; set; } - - public TimeOnly? ExamTime { get; set; } - - public string? Comments { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs deleted file mode 100644 index c459f26..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/CoursebatchesDBO.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class CoursebatchesDBO -{ - public string CourseBatchId { get; set; } = null!; - - public string? CourseId { get; set; } - - public string? Name { get; set; } - - public DateTime? StartDate { get; set; } - - public DateTime? EndDate { get; set; } - - public string? StartTime { get; set; } - - public float? Duration { get; set; } - - /// - /// employeeid - /// - public string? Coordinator { get; set; } - - public int? MaxNumber { get; set; } - - public int? MinNumber { get; set; } - - public string? TrainingBranch { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } - - public float? Amount { get; set; } - - public float? LabHours { get; set; } - - public float? ClassHours { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs deleted file mode 100644 index ede2007..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsConfigDBO.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class ExamsConfigDBO -{ - public sbyte ConfigType { get; set; } - - public sbyte? ExamOrder { get; set; } - - public string ExamName { get; set; } = null!; - - public sbyte? ExamDuration { get; set; } - - public sbyte? ExamCutoffMarks { get; set; } - - public sbyte? IsOmr { get; set; } - - public string? SectionDetails { get; set; } - - public string? SubsectionDetails { get; set; } - - public string? PrecedingExamName { get; set; } - - /// - /// 1-Active 2-Inactive 3-Deleted - /// - public bool? Status { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs deleted file mode 100644 index d1c26f7..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ExamsDBO.cs +++ /dev/null @@ -1,90 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class ExamsDBO -{ - public string ExamId { get; set; } = null!; - - public string? ExamName { get; set; } - - /// - /// 1-Free Exam 2-Paid Exam 3- Course/Batch Exam - /// - public short? ExamType { get; set; } - - public DateOnly? ExamDate { get; set; } - - public TimeOnly? ExamTime { get; set; } - - public string? ExamDuration { get; set; } - - public float? TotalMarksExamined { get; set; } - - public string? TotalCutOffMarks { get; set; } - - /// - /// List of examids that are to be cleared to write this exam - /// - public string? PrecedingExamIds { get; set; } - - public bool? IsCourseExam { get; set; } - - public bool? IsOnline { get; set; } - - public bool? IsVisible { get; set; } - - public bool? ShowHint { get; set; } - - public bool? ShowDescription { get; set; } - - /// - /// Using one questionpaperid, Provision for 5 comma separated questionpaperids ex:OQN-20151029024904 - /// - public string? QuestionPaperIds { get; set; } - - public string? QuestionPaperId { get; set; } - - public string? ExamUniqCode { get; set; } - - public string? BatchId { get; set; } - - public string? ServiceId { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? SubTopic1 { get; set; } - - public string? SubTopic2 { get; set; } - - public string? SubTopic3 { get; set; } - - public string? SubTopic4 { get; set; } - - public string? SubTopic5 { get; set; } - - public string? SubTopic6 { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs deleted file mode 100644 index e47b9e1..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GetCandidateExamsDBO.cs +++ /dev/null @@ -1,141 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class GetCandidateExamsDBO -{ - public string CandidateExamId { get; set; } = null!; - - public string? ExamId { get; set; } - - public string? UserId { get; set; } - - public string? ExamUniqCode { get; set; } - - /// - /// 1 - Exam running, 2 - Exam Completed, 3 - Deative - /// - public bool? Status { get; set; } - - public DateTime? CreatedOn { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? CreatedBy { get; set; } - - public string? ModifiedBy { get; set; } - - public string? UserName { get; set; } - - public string? ExamsExamId { get; set; } - - public string? ExamName { get; set; } - - /// - /// 1-Free Exam 2-Paid Exam 3- Course/Batch Exam - /// - public short? ExamType { get; set; } - - public string? BatchId { get; set; } - - public DateOnly? ExamDate { get; set; } - - public DateTime? ExamsCreatedOn { get; set; } - - public DateTime? ExamsModifiedOn { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? ExamsStatus { get; set; } - - public string? ExamsReatedBy { get; set; } - - public string? ExamsModifiedBy { get; set; } - - public TimeOnly? ExamTime { get; set; } - - public string? ExamsExamUniqCode { get; set; } - - public bool? IsCourseExam { get; set; } - - public string? UsersUserId { get; set; } - - public string? UserDisplayId { get; set; } - - public string? FirstName { get; set; } - - public string? LastName { get; set; } - - public string? Salutation { get; set; } - - public string? EmailAddress { get; set; } - - public string? Password { get; set; } - - /// - /// 0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider - /// - public int? UserType { get; set; } - - public DateTime? DateOfBirth { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9 - /// - public bool? UsersStatus { get; set; } - - public DateTime? UsersCreatedOn { get; set; } - - public DateTime? UsersModifiedOn { get; set; } - - public string? UsersCreatedBy { get; set; } - - public string? UsersModifiedBy { get; set; } - - public string? Address1Street1 { get; set; } - - public string? Address1Street2 { get; set; } - - public string? Address1City { get; set; } - - public string? Address1State { get; set; } - - public string? Address1Country { get; set; } - - public string? Address1Pincode { get; set; } - - public string? Address2Street1 { get; set; } - - public string? Address2Street2 { get; set; } - - public string? Address2City { get; set; } - - public string? Address2State { get; set; } - - public string? Address2Country { get; set; } - - public string? Address2Pincode { get; set; } - - /// - /// Path of thumb impression - /// - public string? ThumbImpression { get; set; } - - /// - /// Path of trainee photo - /// - public string? TraineePhoto { get; set; } - - public string? MobileNumber { get; set; } - - public string? EmergencyContactNumber { get; set; } - - public string? LinkedinId { get; set; } - - public string? FacebookId { get; set; } - - public string? RegistrationNumber { get; set; } - - public string? TrainingProviderId { get; set; } - - public bool? Gender { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs deleted file mode 100644 index 2ec354e..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/GroupsDBO.cs +++ /dev/null @@ -1,34 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class GroupsDBO -{ - public string GroupId { get; set; } = null!; - - public int GroupDisplayId { get; set; } - - public string? ImagePath { get; set; } - - /// - /// Passage for comprehension questions - /// - public string? GroupDescription { get; set; } - - public string? SectionId { get; set; } - - public string? SubsectionId { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs deleted file mode 100644 index b80ae54..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/LogsDBO.cs +++ /dev/null @@ -1,31 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public class LogsDBO -{ - public string LogId { get; set; } = null!; - - public string? UserName { get; set; } - - public sbyte? UserType { get; set; } - - public string? EmailAddress { get; set; } - - public string? PageName { get; set; } - - public string Action { get; set; } = null!; - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs deleted file mode 100644 index e52e576..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarkDetailsDBO.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class MarkdetailsDBO -{ - public string? Markdetailsid { get; set; } - - public string? NumberOfQuestions { get; set; } - - public int ActualMarks { get; set; } - - public float? MarksSecured { get; set; } - - public float? NegativeMarks { get; set; } - - /// - /// References marks.marksid - /// - public string? MarksId { get; set; } - - public string? SectionId { get; set; } - - public string? SubsectionId { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs deleted file mode 100644 index 678b562..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/MarksDBO.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class MarksDBO -{ - public string MarksId { get; set; } = null!; - - public string? ExamId { get; set; } - - public string? UserId { get; set; } - - public string? ExamWrittenDate { get; set; } - - public float? TotalMarksExamined { get; set; } - - public string? CutOffMarks { get; set; } - - public float? TotalMarksSecured { get; set; } - - public float? NegativeMarksSecured { get; set; } - - public float? PositiveMarksSecured { get; set; } - - public string? TimeRelapsed { get; set; } - - public sbyte? IsReportSent { get; set; } - - public DateTime? ReportDate { get; set; } - - public string? QuestionPaperId { get; set; } - - public string? CourseId { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? Grade { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs deleted file mode 100644 index 870aa3e..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamQuestionPapersDBO.cs +++ /dev/null @@ -1,94 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class OnlineExamQuestionPapersDBO -{ - public int SequenceNumber { get; set; } - - public int QuestionPaperId { get; set; } - - public string ExamId { get; set; } = null!; - - public string QuestionId { get; set; } = null!; - - /// - /// 1 - the questionis of OMR type, 2- the questionis non OMR type - /// - public sbyte? IsOmr { get; set; } - - public sbyte Complexity { get; set; } - - public float? NegativeMarksPerQuestion { get; set; } - - public float? PositiveMarksPerQuestion { get; set; } - - public string? QuestionDescription { get; set; } - - public string? QuestionHint { get; set; } - - public string? Option1 { get; set; } - - public string? Option2 { get; set; } - - public string? Option3 { get; set; } - - public string? Option4 { get; set; } - - /// - /// It contains one of four opions i.e a,b,c,d - /// - public string? Answer { get; set; } - - public string? AnswerFormat { get; set; } - - public string? DescriptiveAnswer { get; set; } - - public string? QuestionFilePath { get; set; } - - public string? Option1FilePath { get; set; } - - public string? Option2FilePath { get; set; } - - public string? Option3FilePath { get; set; } - - public string? Option4FilePath { get; set; } - - public string? AnswerFilePath { get; set; } - - public string? DescriptiveAnswerExplanation { get; set; } - - public int? GroupDisplayId { get; set; } - - public string? ImagePath { get; set; } - - /// - /// For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) - /// - public string? GroupDescription { get; set; } - - public string? ExamOrCourseId { get; set; } - - public string? GroupId { get; set; } - - public string SectionId { get; set; } = null!; - - public string SectionDescription { get; set; } = null!; - - public string SubsectionId { get; set; } = null!; - - public string SubsectionDescription { get; set; } = null!; - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs deleted file mode 100644 index 68cc51c..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/OnlineExamSubmittedAnswersDBO.cs +++ /dev/null @@ -1,34 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class OnlineExamSubmittedAnswersDBO -{ - public DateTime? CreatedOn { get; set; } - - public string UserId { get; set; } = null!; - - public string ExamId { get; set; } = null!; - - public string QuestionId { get; set; } = null!; - - public string? TableName { get; set; } - - public string? CorrectAnswer { get; set; } - - public string? SubmittedAnswer { get; set; } - - public int? QuestionNumber { get; set; } - - public string SectionId { get; set; } = null!; - - public string SubsectionId { get; set; } = null!; - - public TimeOnly? SubmittedTime { get; set; } - - public string? TrainingProviderId { get; set; } - - public float? PositiveMarks { get; set; } - - public float? NegativeMarks { get; set; } - - public float ObtainedMarks { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs deleted file mode 100644 index ad5caa0..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/PrintDetailsDBO.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class PrintDetailsDBO -{ - public string? PrintDetailId { get; set; } - - public string? QuestionPaperId { get; set; } - - public bool? IsOnline { get; set; } - - public string? QuestionPaperPath { get; set; } - - public string? CourseId { get; set; } - - public string? ExamId { get; set; } - - public string? Instructions { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs deleted file mode 100644 index 7e3b25d..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QualificationsDBO.cs +++ /dev/null @@ -1,97 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class QualificationsDBO -{ - public string QualificationId { get; set; } = null!; - - public string? UserId { get; set; } - - public string? QualificationName { get; set; } - - public string? Specialization { get; set; } - - /// - /// 1 - School 2 - Intermediate 3 - Graduation 4 - Post Graduation - /// - public bool? QualificationLevel { get; set; } - - public string? SchoolCollageName { get; set; } - - /// - /// 1-passed 2- failed 3- discontinued - /// - public int? CompleteStatus { get; set; } - - public int? TotalMarks { get; set; } - - public int? MarksSecured { get; set; } - - public string? BoardUniversity { get; set; } - - public float? Percentage { get; set; } - - public float? Aggregate1Year { get; set; } - - public float? Aggregate2Year { get; set; } - - public float? Aggregate3Year { get; set; } - - public float? Aggregate4Year { get; set; } - - public int? NumOfBacklogs1Year { get; set; } - - public int? NumOfBacklogs2Year { get; set; } - - public int? NumOfBacklogs3Year { get; set; } - - public int? NumOfBacklogs4Year { get; set; } - - public int? NumOfBacklogsPending1Year { get; set; } - - public int? NumOfBacklogsPending2Year { get; set; } - - public int? NumOfBacklogsPending3Year { get; set; } - - public int? NumOfBacklogsPending4Year { get; set; } - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? Street1 { get; set; } - - public string? Street2 { get; set; } - - public string? City { get; set; } - - public string? State { get; set; } - - public string? Country { get; set; } - - public string? Pincode { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } - - public short? PassedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs deleted file mode 100644 index 94b87f1..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestiondetailsDBO.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class QuestiondetailsDBO -{ - public string? QuestionDetailId { get; set; } - - public string? QuestionPaperId { get; set; } - - public string? ExamId { get; set; } - - public string? NumberOfQuestions { get; set; } - - public string? MarksExamined { get; set; } - - public string? CutOffMarks { get; set; } - - public sbyte? IsOmr { get; set; } - - public sbyte? IsOnline { get; set; } - - public int? GroupCount { get; set; } - - public float? NegativeMarks { get; set; } - - public string? CourseId { get; set; } - - public string? SectionId { get; set; } - - public string? SubsectionId { get; set; } - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs deleted file mode 100644 index 86bbe9e..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/QuestionsDBO.cs +++ /dev/null @@ -1,74 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class QuestionsDBO -{ - public string QuestionId { get; set; } = null!; - - /// - /// For comprehension questions, Actual passage is in groups(groupdescription) table and references groups(groupid) - /// - public string? GroupId { get; set; } - - /// - /// 1 - the questionis of OMR type, 2- the questionis non OMR type - /// - public bool? IsOmr { get; set; } - - public bool Complexity { get; set; } - - public string? QuestionDescription { get; set; } - - public string? QuestionHint { get; set; } - - public string? Option1 { get; set; } - - public string? Option2 { get; set; } - - public string? Option3 { get; set; } - - public string? Option4 { get; set; } - - /// - /// It contains one of four opions i.e a,b,c,d - /// - public string? Answer { get; set; } - - public string? AnswerFormat { get; set; } - - public string? DescriptiveAnswer { get; set; } - - public string? QuestionFilePath { get; set; } - - public string? Option1FilePath { get; set; } - - public string? Option2FilePath { get; set; } - - public string? Option3FilePath { get; set; } - - public string? Option4FilePath { get; set; } - - public string? AnswerFilePath { get; set; } - - public string? DescriptiveAnswerExplanation { get; set; } - - public string? ExamorCourseId { get; set; } - - public string SectionId { get; set; } = null!; - - public string SubsectionId { get; set; } = null!; - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs deleted file mode 100644 index fa779e3..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SectionsDBO.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class SectionsDBO -{ - public string SectionId { get; set; } = null!; - - public string? SectionDescription { get; set; } - - public string Suggestions { get; set; } = null!; - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs deleted file mode 100644 index 40267e3..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ServicesDBO.cs +++ /dev/null @@ -1,78 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class ServicesDBO -{ - public string ServiceId { get; set; } = null!; - - public string? ServiceName { get; set; } - - /// - /// 1- single course 2- multiple coureses - /// - public short? ServiceType { get; set; } - - /// - /// stores multiple serviceids seperated with comma - /// - public string? ChildServiceId { get; set; } - - public string? Description { get; set; } - - public string? Category { get; set; } - - public short? MaxNumber { get; set; } - - public short? MinNumber { get; set; } - - public float? Fees { get; set; } - - /// - /// employeeid - /// - public string? Faculty { get; set; } - - public float? CourseDuration { get; set; } - - /// - /// 2- exam 1- course - /// - public bool? IsExam { get; set; } - - public bool? IsFreeExam { get; set; } - - /// - /// 1-FreeExam 0-PaidExam - /// - public float? Amount { get; set; } - - public float? ClassHours { get; set; } - - public float? LabHours { get; set; } - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs deleted file mode 100644 index 9031a91..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/StudentdetailsDBO.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class StudentdetailsDBO -{ - /// - /// hall ticket number is unique for every candidate - /// - public string HallTicketNumber { get; set; } = null!; - - public string Name { get; set; } = null!; - - public string? Branch { get; set; } - - public float? FirstYearPercentage { get; set; } - - public float? SecondYearPercentage { get; set; } - - public float? ThirdYearPercentage { get; set; } - - public float? OverallPercentage { get; set; } - - public int? FirstYearBackLogs { get; set; } - - public int? SecondYearBackLogs { get; set; } - - public int? ThirdYearBackLogs { get; set; } - - public string? EmailId { get; set; } - - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs deleted file mode 100644 index 5763b1e..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubscribedTrainingsDBO.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class SubscribedTrainingsDBO -{ - public string TrainingId { get; set; } = null!; - - public string? UserId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } - - public string? ResString1 { get; set; } - - public string? ResString2 { get; set; } - - public int? ResInt1 { get; set; } - - public int? ResInt2 { get; set; } - - public float? ResFloat1 { get; set; } - - public float? ResFloat2 { get; set; } - - /// - /// services id for course - /// - public string? CourseId { get; set; } - - public string? BatchId { get; set; } - - public float? Amount { get; set; } - - public string? TrainingProviderId { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs deleted file mode 100644 index 205b1c9..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/SubsectionsDBO.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class SubsectionsDBO -{ - public string SubsectionId { get; set; } = null!; - - public string? SubsectionDescription { get; set; } - - public string? SectionId { get; set; } - - public string? TrainingProviderId { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs deleted file mode 100644 index cda9626..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TestUserRegistrationdetailsDBO.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class TestUserRegistrationdetailsDBO -{ - public string? HtNo { get; set; } - - public string? FailedDbReason { get; set; } - - public string? InsertStmt { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs deleted file mode 100644 index 72dc005..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/ThemeTemplatesDBO.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class ThemeTemplatesDBO -{ - public sbyte ThemeTemplateId { get; set; } - - public string? ThemeTemplateName { get; set; } - - public string? ThemeTemplatePath { get; set; } - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs b/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs deleted file mode 100644 index 7b48c99..0000000 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/TrainingprovidersDBO.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace DotnetBoilerPlate.DAL.Models; - -public partial class TrainingprovidersDBO -{ - public string TrainingProviderId { get; set; } = null!; - - /// - /// 1 - active, 2 - deactive, 3 - deleted - /// - public bool? Status { get; set; } - - public string? CreatedBy { get; set; } - - public DateTime? CreatedOn { get; set; } - - public string? ModifiedBy { get; set; } - - public DateTime? ModifiedOn { get; set; } -} diff --git a/DotnetBoilerPlate/.editorconfig b/DotnetFoundation/.editorconfig similarity index 100% rename from DotnetBoilerPlate/.editorconfig rename to DotnetFoundation/.editorconfig diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs b/DotnetFoundation/DotnetFoundation.API/BLL/Interfaces/IUsersBLL.cs similarity index 64% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs rename to DotnetFoundation/DotnetFoundation.API/BLL/Interfaces/IUsersBLL.cs index 3a4e792..79aca7e 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/Interfaces/IUsersBLL.cs +++ b/DotnetFoundation/DotnetFoundation.API/BLL/Interfaces/IUsersBLL.cs @@ -1,8 +1,8 @@ using Microsoft.AspNetCore.Mvc; -using DotnetBoilerPlate.API.Models; -using DotnetBoilerPlate.DAL.Models; +using DotnetFoundation.API.Models; +using DotnetFoundation.DAL.Models; -namespace DotnetBoilerPlate.API.BLL.Interfaces +namespace DotnetFoundation.API.BLL.Interfaces { public interface IUsersBLL { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs b/DotnetFoundation/DotnetFoundation.API/BLL/UsersBLL.cs similarity index 92% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs rename to DotnetFoundation/DotnetFoundation.API/BLL/UsersBLL.cs index 0d766fe..4e9b53f 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/BLL/UsersBLL.cs +++ b/DotnetFoundation/DotnetFoundation.API/BLL/UsersBLL.cs @@ -1,13 +1,13 @@ using AutoMapper; using Microsoft.AspNetCore.Mvc; -using DotnetBoilerPlate.API.BLL.Interfaces; -using DotnetBoilerPlate.API.Helpers; -using DotnetBoilerPlate.API.Models; -using DotnetBoilerPlate.DAL.DatabaseContext; -using DotnetBoilerPlate.DAL.Models; -using DotnetBoilerPlate.DAL.Repositories.Interfaces; +using DotnetFoundation.API.BLL.Interfaces; +using DotnetFoundation.API.Helpers; +using DotnetFoundation.API.Models; +using DotnetFoundation.DAL.DatabaseContext; +using DotnetFoundation.DAL.Models; +using DotnetFoundation.DAL.Repositories.Interfaces; -namespace DotnetBoilerPlate.API.BLL +namespace DotnetFoundation.API.BLL { public class UsersBLL : Controller, IUsersBLL { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs b/DotnetFoundation/DotnetFoundation.API/Controllers/UsersController.cs similarity index 90% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs rename to DotnetFoundation/DotnetFoundation.API/Controllers/UsersController.cs index 97c4e4f..5db9fb9 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/Controllers/UsersController.cs +++ b/DotnetFoundation/DotnetFoundation.API/Controllers/UsersController.cs @@ -1,10 +1,10 @@ using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; -using DotnetBoilerPlate.API.BLL.Interfaces; -using DotnetBoilerPlate.API.Models; -using DotnetBoilerPlate.DAL.Models; +using DotnetFoundation.API.BLL.Interfaces; +using DotnetFoundation.API.Models; +using DotnetFoundation.DAL.Models; -namespace DotnetBoilerPlate.API.Controllers +namespace DotnetFoundation.API.Controllers { [EnableCors] [ApiController] diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj b/DotnetFoundation/DotnetFoundation.API/DotnetFoundation.API.csproj similarity index 93% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj rename to DotnetFoundation/DotnetFoundation.API/DotnetFoundation.API.csproj index 9331e0a..94c447c 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/DotnetBoilerPlate.API.csproj +++ b/DotnetFoundation/DotnetFoundation.API/DotnetFoundation.API.csproj @@ -22,7 +22,7 @@ - + diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs b/DotnetFoundation/DotnetFoundation.API/Helpers/AutoMappingProfile.cs similarity index 66% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs rename to DotnetFoundation/DotnetFoundation.API/Helpers/AutoMappingProfile.cs index 7bd101d..b8fcbf0 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/AutoMappingProfile.cs +++ b/DotnetFoundation/DotnetFoundation.API/Helpers/AutoMappingProfile.cs @@ -1,6 +1,6 @@ using AutoMapper; -namespace DotnetBoilerPlate.API.Helpers +namespace DotnetFoundation.API.Helpers { public class AutoMappingProfile : Profile { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs b/DotnetFoundation/DotnetFoundation.API/Helpers/EnumHelper.cs similarity index 90% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs rename to DotnetFoundation/DotnetFoundation.API/Helpers/EnumHelper.cs index 5212376..5006bcb 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/Helpers/EnumHelper.cs +++ b/DotnetFoundation/DotnetFoundation.API/Helpers/EnumHelper.cs @@ -1,4 +1,4 @@ -namespace DotnetBoilerPlate.API.Helpers +namespace DotnetFoundation.API.Helpers { public static class EnumHelper { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs b/DotnetFoundation/DotnetFoundation.API/Models/BaseResponse.cs similarity index 97% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs rename to DotnetFoundation/DotnetFoundation.API/Models/BaseResponse.cs index 05fcd64..60ca5bb 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/Models/BaseResponse.cs +++ b/DotnetFoundation/DotnetFoundation.API/Models/BaseResponse.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; -namespace DotnetBoilerPlate.API.Models +namespace DotnetFoundation.API.Models { public enum ResponseStatus { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs b/DotnetFoundation/DotnetFoundation.API/Program.cs similarity index 94% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs rename to DotnetFoundation/DotnetFoundation.API/Program.cs index fdda26e..1b3d077 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.API/Program.cs +++ b/DotnetFoundation/DotnetFoundation.API/Program.cs @@ -9,12 +9,12 @@ using Serilog; using Serilog.Events; using Swashbuckle.AspNetCore.Filters; -using DotnetBoilerPlate.API.BLL; -using DotnetBoilerPlate.API.BLL.Interfaces; -using DotnetBoilerPlate.API.Models; -using DotnetBoilerPlate.DAL.DatabaseContext; -using DotnetBoilerPlate.DAL.Repositories; -using DotnetBoilerPlate.DAL.Repositories.Interfaces; +using DotnetFoundation.API.BLL; +using DotnetFoundation.API.BLL.Interfaces; +using DotnetFoundation.API.Models; +using DotnetFoundation.DAL.DatabaseContext; +using DotnetFoundation.DAL.Repositories; +using DotnetFoundation.DAL.Repositories.Interfaces; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json b/DotnetFoundation/DotnetFoundation.API/Properties/launchSettings.json similarity index 100% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/Properties/launchSettings.json rename to DotnetFoundation/DotnetFoundation.API/Properties/launchSettings.json diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json b/DotnetFoundation/DotnetFoundation.API/appsettings.Development.json similarity index 100% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.Development.json rename to DotnetFoundation/DotnetFoundation.API/appsettings.Development.json diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json b/DotnetFoundation/DotnetFoundation.API/appsettings.json similarity index 100% rename from DotnetBoilerPlate/DotnetBoilerPlate.API/appsettings.json rename to DotnetFoundation/DotnetFoundation.API/appsettings.json diff --git a/DotnetFoundation/DotnetFoundation.DAL/DatabaseContext/SqlDatabaseContext.cs b/DotnetFoundation/DotnetFoundation.DAL/DatabaseContext/SqlDatabaseContext.cs new file mode 100644 index 0000000..2d1e428 --- /dev/null +++ b/DotnetFoundation/DotnetFoundation.DAL/DatabaseContext/SqlDatabaseContext.cs @@ -0,0 +1,182 @@ +using Microsoft.EntityFrameworkCore; +using DotnetFoundation.DAL.Models; + +namespace DotnetFoundation.DAL.DatabaseContext +{ + public partial class SqlDatabaseContext : DbContext + { + public SqlDatabaseContext() + { + } + + public SqlDatabaseContext(DbContextOptions options) + : base(options) + { + } + + + public DbSet Users { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .UseCollation("latin1_swedish_ci") + .HasCharSet("latin1"); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.UserId).HasName("PRIMARY"); + + entity + .ToTable("users") + .HasCharSet("utf8") + .UseCollation("utf8_general_ci"); + + entity.Property(e => e.UserId) + .HasMaxLength(36) + .HasColumnName("userid"); + entity.Property(e => e.Address1City) + .HasMaxLength(50) + .HasColumnName("address1_city"); + entity.Property(e => e.Address1Country) + .HasMaxLength(50) + .HasColumnName("address1_country"); + entity.Property(e => e.Address1Pincode) + .HasMaxLength(20) + .HasColumnName("address1_pincode"); + entity.Property(e => e.Address1State) + .HasMaxLength(50) + .HasColumnName("address1_state"); + entity.Property(e => e.Address1Street1) + .HasMaxLength(50) + .HasColumnName("address1_street1"); + entity.Property(e => e.Address1Street2) + .HasMaxLength(50) + .HasColumnName("address1_street2"); + entity.Property(e => e.Address2City) + .HasMaxLength(50) + .HasColumnName("address2_city"); + entity.Property(e => e.Address2Country) + .HasMaxLength(50) + .HasColumnName("address2_country"); + entity.Property(e => e.Address2Pincode) + .HasMaxLength(20) + .HasColumnName("address2_pincode"); + entity.Property(e => e.Address2State) + .HasMaxLength(50) + .HasColumnName("address2_state"); + entity.Property(e => e.Address2Street1) + .HasMaxLength(50) + .HasColumnName("address2_street1"); + entity.Property(e => e.Address2Street2) + .HasMaxLength(100) + .HasColumnName("address2_street2"); + entity.Property(e => e.CandidateComments) + .HasMaxLength(500) + .HasColumnName("candidatecomments"); + entity.Property(e => e.Comments) + .HasMaxLength(500) + .HasColumnName("comments"); + entity.Property(e => e.CreatedBy) + .HasMaxLength(36) + .HasColumnName("createdby"); + entity.Property(e => e.CreatedOn) + .HasColumnType("datetime") + .HasColumnName("createdon"); + entity.Property(e => e.DateOfBirth) + .HasColumnType("datetime") + .HasColumnName("dateofbirth"); + entity.Property(e => e.EmailAddress) + .HasMaxLength(50) + .HasColumnName("emailaddress"); + entity.Property(e => e.EmergencyContactNumber) + .HasMaxLength(20) + .HasColumnName("emergencycontactnumber"); + entity.Property(e => e.FacebookId) + .HasMaxLength(50) + .HasColumnName("facebookid"); + entity.Property(e => e.Features) + .HasColumnType("text") + .HasColumnName("features"); + entity.Property(e => e.FingerPrintValue) + .HasMaxLength(100) + .HasComment("Path of finger print") + .HasColumnName("fingerprintvalue"); + entity.Property(e => e.FirstName) + .HasMaxLength(50) + .HasColumnName("firstname"); + entity.Property(e => e.Gender).HasColumnName("gender"); + entity.Property(e => e.HallTicket) + .HasMaxLength(20) + .HasColumnName("hallticket"); + entity.Property(e => e.IsAcceptedTermsAndConditions).HasColumnName("isacceptedtermsandconditions"); + entity.Property(e => e.LastName) + .HasMaxLength(50) + .HasColumnName("lastname"); + entity.Property(e => e.LinkedinId) + .HasMaxLength(50) + .HasColumnName("linkedinid"); + entity.Property(e => e.MobileNumber) + .HasMaxLength(20) + .HasColumnName("mobilenumber"); + entity.Property(e => e.ModifiedBy) + .HasMaxLength(36) + .HasColumnName("modifiedby"); + entity.Property(e => e.ModifiedOn) + .HasColumnType("datetime") + .HasColumnName("modifiedon"); + entity.Property(e => e.Password) + .HasMaxLength(20) + .HasColumnName("password"); + entity.Property(e => e.ProfilePicPath) + .HasMaxLength(100) + .HasComment("Path of profile picture") + .HasColumnName("profilepicpath"); + entity.Property(e => e.QuestionPaperSetNumber).HasColumnName("questionpapersetnumber"); + entity.Property(e => e.RegistrationNumber) + .HasMaxLength(20) + .HasColumnName("registrationumber"); + entity.Property(e => e.ResFloat1).HasColumnName("res_float1"); + entity.Property(e => e.ResFloat2).HasColumnName("res_float2"); + entity.Property(e => e.ResInt1).HasColumnName("res_int1"); + entity.Property(e => e.ResInt2).HasColumnName("res_int2"); + entity.Property(e => e.ResString1) + .HasMaxLength(100) + .HasColumnName("res_string1"); + entity.Property(e => e.ResString2) + .HasMaxLength(100) + .HasColumnName("res_string2"); + entity.Property(e => e.Salutation) + .HasMaxLength(5) + .IsFixedLength() + .HasColumnName("salutation"); + entity.Property(e => e.Status) + .HasDefaultValueSql("'1'") + .HasComment("1 - active, 2 - deactive, 3 - deleted, 0 - dummy user, Shouldnot use 9") + .HasColumnName("status"); + entity.Property(e => e.ThumbImpression) + .HasMaxLength(100) + .HasComment("Path of thumb impression") + .HasColumnName("thumbimpression"); + entity.Property(e => e.TraineePhoto) + .HasMaxLength(100) + .HasComment("Path of trainee photo") + .HasColumnName("traineephoto"); + entity.Property(e => e.TrainingProviderId) + .HasMaxLength(36) + .HasColumnName("trainingproviderid"); + entity.Property(e => e.UnSubscribe).HasColumnName("unsubscribe"); + entity.Property(e => e.UserDisplayId) + .HasMaxLength(20) + .HasColumnName("userdisplayid"); + entity.Property(e => e.UserType) + .HasComment("0-Admin, 1-employee, 2-trainee, 3-super user, 4-trainingprovider") + .HasColumnName("usertype"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); + } +} diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj b/DotnetFoundation/DotnetFoundation.DAL/DotnetFoundation.DAL.csproj similarity index 100% rename from DotnetBoilerPlate/DotnetBoilerPlate.DAL/DotnetBoilerPlate.DAL.csproj rename to DotnetFoundation/DotnetFoundation.DAL/DotnetFoundation.DAL.csproj diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs b/DotnetFoundation/DotnetFoundation.DAL/Models/UsersDBO.cs similarity index 98% rename from DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs rename to DotnetFoundation/DotnetFoundation.DAL/Models/UsersDBO.cs index 7accea1..31fe61c 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Models/UsersDBO.cs +++ b/DotnetFoundation/DotnetFoundation.DAL/Models/UsersDBO.cs @@ -1,4 +1,4 @@ -namespace DotnetBoilerPlate.DAL.Models; +namespace DotnetFoundation.DAL.Models; public partial class UsersDBO { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs b/DotnetFoundation/DotnetFoundation.DAL/Repositories/Interfaces/IUsersRepo.cs similarity index 58% rename from DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs rename to DotnetFoundation/DotnetFoundation.DAL/Repositories/Interfaces/IUsersRepo.cs index d0c0482..6f05f87 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/Interfaces/IUsersRepo.cs +++ b/DotnetFoundation/DotnetFoundation.DAL/Repositories/Interfaces/IUsersRepo.cs @@ -1,6 +1,6 @@ -using DotnetBoilerPlate.DAL.Models; +using DotnetFoundation.DAL.Models; -namespace DotnetBoilerPlate.DAL.Repositories.Interfaces +namespace DotnetFoundation.DAL.Repositories.Interfaces { public interface IUsersRepo { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs b/DotnetFoundation/DotnetFoundation.DAL/Repositories/UsersRepo.cs similarity index 75% rename from DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs rename to DotnetFoundation/DotnetFoundation.DAL/Repositories/UsersRepo.cs index 92b1019..2ad7e5f 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.DAL/Repositories/UsersRepo.cs +++ b/DotnetFoundation/DotnetFoundation.DAL/Repositories/UsersRepo.cs @@ -1,8 +1,8 @@ -using DotnetBoilerPlate.DAL.DatabaseContext; -using DotnetBoilerPlate.DAL.Models; -using DotnetBoilerPlate.DAL.Repositories.Interfaces; +using DotnetFoundation.DAL.DatabaseContext; +using DotnetFoundation.DAL.Models; +using DotnetFoundation.DAL.Repositories.Interfaces; -namespace DotnetBoilerPlate.DAL.Repositories +namespace DotnetFoundation.DAL.Repositories { public class UsersRepo : IUsersRepo { diff --git a/DotnetBoilerPlate/DotnetBoilerPlate.sln b/DotnetFoundation/DotnetFoundation.sln similarity index 81% rename from DotnetBoilerPlate/DotnetBoilerPlate.sln rename to DotnetFoundation/DotnetFoundation.sln index 5811bc3..ab7547e 100644 --- a/DotnetBoilerPlate/DotnetBoilerPlate.sln +++ b/DotnetFoundation/DotnetFoundation.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.7.34003.232 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetBoilerPlate.API", "DotnetBoilerPlate.API\DotnetBoilerPlate.API.csproj", "{1C10A534-DB66-494B-B797-55143C40C9D1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetFoundation.API", "DotnetFoundation.API\DotnetFoundation.API.csproj", "{1C10A534-DB66-494B-B797-55143C40C9D1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetBoilerPlate.DAL", "DotnetBoilerPlate.DAL\DotnetBoilerPlate.DAL.csproj", "{9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetFoundation.DAL", "DotnetFoundation.DAL\DotnetFoundation.DAL.csproj", "{9E92CC0E-F0F8-4511-A5D9-D7B192CC9DA1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{37C6C65D-EB24-40A7-A954-0446B3D1511D}" ProjectSection(SolutionItems) = preProject