diff --git a/.editorconfig b/.editorconfig index ba0c8d2..e69de29 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,229 +0,0 @@ -# Remove the line below if you want to inherit .editorconfig settings from higher directories -root = true - -# C# files -[*.cs] - -#### Core EditorConfig Options #### - -# Indentation and spacing -indent_size = 4 -indent_style = space -tab_width = 4 - -# New line preferences -end_of_line = crlf -insert_final_newline = false - -#### .NET Coding Conventions #### - -# Organize usings -dotnet_separate_import_directive_groups = true -dotnet_sort_system_directives_first = true -file_header_template = unset - -# this. and Me. preferences -dotnet_style_qualification_for_event = true -dotnet_style_qualification_for_field = true -dotnet_style_qualification_for_method = true -dotnet_style_qualification_for_property = true - -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true -dotnet_style_predefined_type_for_member_access = true - -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:error -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:error -dotnet_style_parentheses_in_other_operators = never_if_unnecessary -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:error - -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members - -# Expression-level preferences -dotnet_style_coalesce_expression = false -dotnet_style_collection_initializer = true -dotnet_style_explicit_tuple_names = true:error -dotnet_style_namespace_match_folder = true -dotnet_style_null_propagation = true -dotnet_style_object_initializer = true -dotnet_style_operator_placement_when_wrapping = beginning_of_line -dotnet_style_prefer_auto_properties = true -dotnet_style_prefer_compound_assignment = true -dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_return = true:suggestion -dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed -dotnet_style_prefer_inferred_anonymous_type_member_names = false -dotnet_style_prefer_inferred_tuple_names = false -dotnet_style_prefer_is_null_check_over_reference_equality_method = true -dotnet_style_prefer_simplified_boolean_expressions = true -dotnet_style_prefer_simplified_interpolation = true - -# Field preferences -dotnet_style_readonly_field = true:warning - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:error - -# Suppression preferences -dotnet_remove_unnecessary_suppression_exclusions = none - -# New line preferences -dotnet_style_allow_multiple_blank_lines_experimental = false:error -dotnet_style_allow_statement_immediately_after_block_experimental = false:warning - -#### C# Coding Conventions #### - -# var preferences -csharp_style_var_elsewhere = false:error -csharp_style_var_for_built_in_types = false:error -csharp_style_var_when_type_is_apparent = false:error - -# Expression-bodied members -csharp_style_expression_bodied_accessors = false -csharp_style_expression_bodied_constructors = false -csharp_style_expression_bodied_indexers = false -csharp_style_expression_bodied_lambdas = true -csharp_style_expression_bodied_local_functions = false -csharp_style_expression_bodied_methods = when_on_single_line:suggestion -csharp_style_expression_bodied_operators = false -csharp_style_expression_bodied_properties = false - -# Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = false -csharp_style_pattern_matching_over_is_with_cast_check = false -csharp_style_prefer_extended_property_pattern = true -csharp_style_prefer_not_pattern = true -csharp_style_prefer_pattern_matching = true -csharp_style_prefer_switch_expression = false - -# Null-checking preferences -csharp_style_conditional_delegate_call = false - -# Modifier preferences -csharp_prefer_static_local_function = false -csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async -csharp_style_prefer_readonly_struct = true:warning -csharp_style_prefer_readonly_struct_member = true - -# Code-block preferences -csharp_prefer_braces = when_multiline:error -csharp_prefer_simple_using_statement = false -csharp_style_namespace_declarations = file_scoped:error -csharp_style_prefer_method_group_conversion = true:suggestion -csharp_style_prefer_top_level_statements = true:error - -# Expression-level preferences -csharp_prefer_simple_default_expression = true -csharp_style_deconstructed_variable_declaration = false -csharp_style_implicit_object_creation_when_type_is_apparent = false -csharp_style_inlined_variable_declaration = true -csharp_style_prefer_index_operator = false:error -csharp_style_prefer_local_over_anonymous_function = true:error -csharp_style_prefer_null_check_over_type_check = true -csharp_style_prefer_range_operator = false:error -csharp_style_prefer_tuple_swap = true -csharp_style_prefer_utf8_string_literals = true -csharp_style_throw_expression = false -csharp_style_unused_value_assignment_preference = unused_local_variable -csharp_style_unused_value_expression_statement_preference = unused_local_variable - -# 'using' directive preferences -csharp_using_directive_placement = outside_namespace:error - -# New line preferences -csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true -csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true -csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true -csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:error -csharp_style_allow_embedded_statements_on_same_line_experimental = true - -#### C# Formatting Rules #### - -# New line preferences -csharp_new_line_before_catch = false -csharp_new_line_before_else = false -csharp_new_line_before_finally = false -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_open_brace = none -csharp_new_line_between_query_expression_clauses = true - -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = true -csharp_indent_labels = one_less_than_current -csharp_indent_switch_labels = true - -# Space preferences -csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_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_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - -# Wrapping preferences -csharp_preserve_single_line_blocks = true -csharp_preserve_single_line_statements = true - -#### Naming styles #### - -# Naming rules - -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.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.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 diff --git a/.gitignore b/.gitignore index 4edfdda..a460c74 100644 --- a/.gitignore +++ b/.gitignore @@ -337,6 +337,23 @@ ASALocalRun/ !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json -.vscode .env + +/Fab2ApprovalMKLink/App_Start +/Fab2ApprovalMKLink/Controllers +/Fab2ApprovalMKLink/DMO +/Fab2ApprovalMKLink/Jobs +/Fab2ApprovalMKLink/JobSchedules +/Fab2ApprovalMKLink/Misc +/Fab2ApprovalMKLink/Models +/Fab2ApprovalMKLink/PdfGenerator +/Fab2ApprovalMKLink/Utilities +/Fab2ApprovalMKLink/ViewModels + +/Fab2ApprovalMKLink/.vscode/.UserSecrets +/Fab2ApprovalSystem/.vscode/.UserSecrets +/Fab2ApprovalTests/.vscode/.UserSecrets +/MesaFabApproval.API/.vscode/.UserSecrets +/MesaFabApproval.Client/.vscode/.UserSecrets +/MesaFabApproval.Shared/.vscode/.UserSecrets \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7249802 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,41 @@ +{ + // 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 (console) - Fab2ApprovalSystem", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "Fab2ApprovalSystem-build", + "program": "${workspaceFolder}/Fab2ApprovalSystem/bin/Debug/net8.0/win-x64/Fab2ApprovalSystem.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Launch (console) - MesaFabApproval.API", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "MesaFabApproval.API-build", + "program": "${workspaceFolder}/MesaFabApproval.API/bin/Debug/net8.0/MesaFabApproval.API.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + }, + { + "type": "node", + "request": "launch", + "name": "node Launch Current Opened File", + "program": "${file}" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f05d843 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,424 @@ +{ + "[markdown]": { + "editor.wordWrap": "off" + }, + "files.exclude": { + "**/.git": false, + "**/node_modules": true + }, + "files.watcherExclude": { + "**/node_modules": true + }, + "cSpell.words": [ + "abutton", + "accessibilities", + "accodingly", + "acknowledgmentby", + "Acks", + "actionsheet", + "Additonal", + "Addtional", + "againm", + "agendaview", + "Antlr", + "Appover", + "Appprrovers", + "Approvalog", + "Aprovers", + "Aproverslist", + "asax", + "aspnetmvc", + "Assignedto", + "Atachments", + "Attachemnt", + "Attachemnts", + "Attchment", + "auditee", + "Auditee", + "Auditees", + "automaically", + "Autthorized", + "beacuase", + "beforeunload", + "Belguim", + "bfound", + "bgcolor", + "Bies", + "binded", + "blackbackground", + "blackhover", + "blackpressed", + "blueenergy", + "blueopal", + "buttongroup", + "BYMRB", + "bytesgot", + "CAID", + "casection", + "CAXXXX", + "CCPCR", + "CCPCRB", + "cellspacing", + "Cheeso's", + "chkbx", + "Clib", + "colorpicker", + "columnmenu", + "columnsreorder", + "columnsresize", + "comming", + "Containmen", + "Copmments", + "correctiv", + "Correctivet", + "Creat", + "currentd", + "Cyle", + "dadada", + "darkbluehover", + "darkbluepressed", + "darkred", + "datafields", + "datasource", + "dataviz", + "datepicker", + "datetimepicker", + "dayview", + "Deletet", + "Delgation", + "DENITED", + "Deparmtent", + "departmentids", + "Descirption", + "devprog", + "dfeffc", + "Disp", + "Dispo", + "Dispoitio", + "Dispos", + "Dispositon", + "Dispostion", + "Dispostions", + "dispotypevalidation", + "Docbase", + "Documentum", + "Documetum", + "dont", + "downlaoded", + "draganddrop", + "dragcancel", + "dropdownlist", + "Eamils", + "ECNPCRB", + "Ecns", + "edmx", + "EECN", + "emai", + "emailparams", + "Emergrncy", + "energyblue", + "Eran", + "Esql", + "ETECN", + "EXCELOPENXML", + "existinglocation", + "Expando", + "extrafield", + "fadc", + "fbec", + "fcfdfd", + "fdff", + "fece", + "feeebd", + "ffdc", + "ffdd", + "fieldset", + "FILIPE", + "filtermenu", + "Fldr", + "flintstone", + "FLOWLOCS", + "FMEA", + "ftplib", + "FTPSPN", + "GETDATE", + "gitea", + "globaldocudms", + "glyphicons", + "groupable", + "Guids", + "halflings", + "Hexsize", + "highcontrast", + "Hmac", + "holdsteps", + "hostspecific", + "icenium", + "IECN", + "imagebrowser", + "IMRB", + "Infineon", + "Insertd", + "inverseicons", + "IPCRB", + "ISADMIN", + "islast", + "ISNULL", + "ITAR", + "jquery", + "jqueryval", + "jqwidgets", + "jqxbuttongroup", + "jqxbuttons", + "jqxcalendar", + "jqxchart", + "jqxcheckbox", + "jqxcolorpicker", + "jqxcombobox", + "jqxcore", + "jqxdata", + "jqxdatatable", + "jqxdatetimeinput", + "jqxdocking", + "jqxdockpanel", + "jqxdragdrop", + "jqxdropdownbutton", + "jqxdropdownlist", + "jqxexpander", + "jqxgauge", + "jqxgrid", + "jqxinput", + "jqxknockout", + "jqxlistbox", + "jqxlistmenu", + "jqxmaskedinput", + "jqxmenu", + "jqxnavigationbar", + "jqxnumberinput", + "jqxpanel", + "jqxpasswordinput", + "jqxprogressbar", + "jqxradiobutton", + "jqxrangeselector", + "jqxrating", + "jqxresponse", + "jqxscrollbar", + "jqxscrollview", + "jqxslider", + "jqxsplitter", + "jqxswitchbutton", + "jqxtabs", + "jqxtooltip", + "jqxtouch", + "jqxtree", + "jqxtreegrid", + "jqxtreemap", + "jqxvalidator", + "jqxwindow", + "kendogridcustom", + "kendoui", + "labelelement", + "labelledby", + "Leanred", + "lightgray", + "linkbutton", + "Linq", + "Listdiv", + "listview", + "Lnks", + "localfilename", + "loclist", + "logis", + "logtext", + "loopmis", + "lotdispo", + "LOTDISPSITION", + "Lotfile", + "lotlist", + "lotstatusoption", + "LTRIM", + "MADUREIRA", + "mailrelay", + "MDTM", + "meego", + "meetingid", + "menubutton", + "mesafi", + "metroblack", + "metrodark", + "miliseconds", + "modalview", + "modernizr", + "Modernizr", + "monthview", + "MRBIs", + "Mrbs", + "msecs", + "multipleextended", + "Navigatable", + "nbsp", + "newbase", + "newchange", + "newdi", + "newfilename", + "newsource", + "Newtonsoft", + "notications", + "Notifcation", + "Notifyf", + "NTLM", + "Nullcc", + "numerictextbox", + "objdata", + "OCAP", + "occured", + "odata", + "oldfilename", + "OLHOLD", + "onclick", + "onmousemove", + "OPDESC", + "OPENQUERY", + "Oper", + "operationslist", + "Orginator", + "Originatorname", + "Ouellette", + "Owin", + "pageable", + "Pageable", + "panelbar", + "parentid", + "parminput", + "parms", + "Parms", + "particula", + "pasv", + "PASV", + "PATINDEX", + "PCRB", + "PCRBID", + "pcrvalues", + "pdbonly", + "Preventitive", + "preventivet", + "Prevetative", + "proces", + "Processedl", + "procs", + "productfamilies", + "progess", + "progressbar", + "qrcode", + "Quanityt", + "rangebar", + "Recep", + "Recepient", + "recieved", + "recordlock", + "remotefilename", + "reorderable", + "reportform", + "reportslist", + "reportslistdiv", + "Reqquired", + "Reqs", + "Requiest", + "Responsibles", + "RETR", + "Revisioing", + "Revisioned", + "Revison", + "rgba", + "rkotian", + "RNFR", + "RNTO", + "Roless", + "roundbg", + "RTRIM", + "SAMDB", + "scroller", + "scrollview", + "seleced", + "selectionlog", + "Selectpart", + "sess", + "Sfisharepoint", + "shinyblack", + "showpassword", + "SIGNON", + "simpleparser", + "slddrw", + "sldprt", + "sortasc", + "sortascbutton", + "sortdesc", + "sortdescbutton", + "sortremove", + "sparkline", + "splitview", + "SPNMRB", + "SPNPDB", + "SSRS", + "Sssign", + "Staus", + "stylesheet", + "Submited", + "subrole", + "subroles", + "Succefully", + "Succesfully", + "sucessfully", + "SURP", + "Swashbuckle", + "SWRN", + "tabindex", + "tabstrip", + "Tahoma", + "taskcompleted", + "Tasklist", + "Taveler", + "TECN", + "TECNs", + "TEMIRWAP", + "tempecd", + "tempimplement", + "templabel", + "tempvalue", + "TEMSA", + "timepicker", + "Tobe", + "Toplevel", + "Totrav", + "trainingby", + "Traininglist", + "traininglistdiv", + "transanction", + "Trav", + "Traveller", + "Traverler", + "TRAVLELER", + "Travler", + "TREEVIEW", + "trigerred", + "ttinclude", + "Uhandled", + "Updat", + "Uplaod", + "Upto", + "userevents", + "userids", + "userlist", + "Validatable", + "valueelement", + "Variabls", + "Verdana", + "vgrid", + "viewmodel", + "vsdoc", + "whethere", + "windowsphone", + "Winsock", + "worlflow" + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..a882968 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,500 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "MSBuild", + "command": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe", + "type": "process", + "args": [ + "/target:Build", + "/restore:True", + "/p:RestoreSources=https://artifactory.intra.infineon.com/artifactory/api/nuget/ngt-fi-package-main-vir/%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://api.nuget.org/v3/index.json", + "/detailedsummary", + "/consoleloggerparameters:PerformanceSummary;ErrorsOnly;", + "/property:Configuration=Debug;TargetFrameworkVersion=v4.8", + "Fab2ApprovalSystem/Fab2ApprovalSystem.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-User Secrets Set", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", + "set", + "_UserSecretsId", + "f2da5035-aba9-4676-9f8d-d6689f84663d" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalMKLink-Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-User Secrets Set", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "set", + "_UserSecretsId", + "3942d1fb-d585-40ae-8985-d276d1b94b77" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-testDebug", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-testRelease", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary", + "-c", + "Release" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Fab2ApprovalTests-Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-User Secrets Set", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "set", + "_UserSecretsId", + "0b98e1f2-95ed-4edd-8149-58cce51ca059" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-testDebug", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-testRelease", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary", + "-c", + "Release" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.API-Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-testDebug", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-testRelease", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary", + "-c", + "Release" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "MesaFabApproval.Client-Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.API/.editorconfig b/MesaFabApproval.API/.editorconfig new file mode 100644 index 0000000..606e6b8 --- /dev/null +++ b/MesaFabApproval.API/.editorconfig @@ -0,0 +1,260 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = false + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = true +dotnet_sort_system_directives_first = true +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = true +dotnet_style_qualification_for_field = true +dotnet_style_qualification_for_method = true +dotnet_style_qualification_for_property = true + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:error +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:error +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:error + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members + +# Expression-level preferences +dotnet_style_coalesce_expression = false +dotnet_style_collection_initializer = true +dotnet_style_explicit_tuple_names = true:error +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true +dotnet_style_object_initializer = true +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true +dotnet_style_prefer_compound_assignment = true +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed +dotnet_style_prefer_inferred_anonymous_type_member_names = false +dotnet_style_prefer_inferred_tuple_names = false +dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_style_prefer_simplified_boolean_expressions = true +dotnet_style_prefer_simplified_interpolation = true + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:error + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +# New line preferences +dotnet_style_allow_multiple_blank_lines_experimental = false:error +dotnet_style_allow_statement_immediately_after_block_experimental = false:warning + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = false:error +csharp_style_var_for_built_in_types = false:error +csharp_style_var_when_type_is_apparent = false:error + +# Expression-bodied members +csharp_style_expression_bodied_accessors = false +csharp_style_expression_bodied_constructors = false +csharp_style_expression_bodied_indexers = false +csharp_style_expression_bodied_lambdas = true +csharp_style_expression_bodied_local_functions = false +csharp_style_expression_bodied_methods = when_on_single_line:suggestion +csharp_style_expression_bodied_operators = false +csharp_style_expression_bodied_properties = false + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = false +csharp_style_pattern_matching_over_is_with_cast_check = false +csharp_style_prefer_extended_property_pattern = true +csharp_style_prefer_not_pattern = true +csharp_style_prefer_pattern_matching = true +csharp_style_prefer_switch_expression = false + +# Null-checking preferences +csharp_style_conditional_delegate_call = false + +# Modifier preferences +csharp_prefer_static_local_function = false +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async +csharp_style_prefer_readonly_struct = true:warning +csharp_style_prefer_readonly_struct_member = true + +# Code-block preferences +csharp_prefer_braces = when_multiline:error +csharp_prefer_simple_using_statement = false +csharp_style_namespace_declarations = file_scoped:error +csharp_style_prefer_method_group_conversion = true:suggestion +csharp_style_prefer_top_level_statements = true:error + +# Expression-level preferences +csharp_prefer_simple_default_expression = true +csharp_style_deconstructed_variable_declaration = false +csharp_style_implicit_object_creation_when_type_is_apparent = false +csharp_style_inlined_variable_declaration = true +csharp_style_prefer_index_operator = false:error +csharp_style_prefer_local_over_anonymous_function = true:error +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_range_operator = false:error +csharp_style_prefer_tuple_swap = true +csharp_style_prefer_utf8_string_literals = true +csharp_style_throw_expression = false +csharp_style_unused_value_assignment_preference = unused_local_variable +csharp_style_unused_value_expression_statement_preference = unused_local_variable + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:error + +# New line preferences +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:error +csharp_style_allow_embedded_statements_on_same_line_experimental = true + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = false +csharp_new_line_before_else = false +csharp_new_line_before_finally = false +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = none +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_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_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### + +# Naming rules + +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.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.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 + +# Question + +dotnet_diagnostic.ASP0025.severity = none # Use AddAuthorizationBuilder to register authorization services and construct policies [MesaFabApproval.API]", +dotnet_diagnostic.CA1510.severity = none # Use 'ArgumentNullException.ThrowIfNull' instead of explicitly throwing a new exception instance [MesaFabApproval.API]", +dotnet_diagnostic.CA1806.severity = none # 'MRBNumberIsValid' calls 'Append' but does not use the value the method returns. Linq methods are known to not have side effects. Use the result in a conditional statement, assign the result to a variable, or pass it as an argument to another method. [MesaFabApproval.API]", +dotnet_diagnostic.CA1822.severity = none # Member 'GenerateRefreshToken' does not access instance data and can be marked as static [MesaFabApproval.API]", +dotnet_diagnostic.CA1825.severity = none # Avoid unnecessary zero-length array allocations. Use Array.Empty() instead. [MesaFabApproval.API]", +dotnet_diagnostic.CA1827.severity = none # Count() is used where Any() could be used instead to improve performance [MesaFabApproval.API]", +dotnet_diagnostic.CA1829.severity = none # Use the \"Count\" property instead of Enumerable.Count() [MesaFabApproval.API]", +dotnet_diagnostic.CA1861.severity = none # Prefer 'static readonly' fields over constant array arguments if the called method is called repeatedly and is not mutating the passed array [MesaFabApproval.API]", +dotnet_diagnostic.CA2208.severity = none # Method UpdateMRBAction passes 'MRB action cannot be null' as the paramName argument to a ArgumentNullException constructor. Replace this argument with one of the method's parameter names. Note that the provided parameter name should have the exact casing as declared on the method. [MesaFabApproval.API]", +dotnet_diagnostic.CA2254.severity = none # The type or namespace name 'AspNetCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS0234.severity = none # The type or namespace name 'Extensions' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS0246.severity = none # The type or namespace name 'ILogger<>' could not be found (are you missing a using directive or an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS1998.severity = none # This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [MesaFabApproval.API]", +dotnet_diagnostic.CS8019.severity = none # Unnecessary using directive +dotnet_diagnostic.CS8600.severity = none # Converting null literal or possible null value to non-nullable type. [MesaFabApproval.API]", +dotnet_diagnostic.CS8625.severity = none # Cannot convert null literal to non-nullable reference type. [MesaFabApproval.API]", +dotnet_diagnostic.CS8765.severity = none # Nullability of type of parameter 'obj' doesn't match overridden member (possibly because of nullability attributes). [MesaFabApproval.Shared]", +dotnet_diagnostic.IDE0001.severity = none # Name can be simplified +dotnet_diagnostic.IDE0017.severity = none # Object initialization can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0022.severity = none # Use expression body for method [MesaFabApproval.Shared]", +dotnet_diagnostic.IDE0028.severity = none # Collection initialization can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0044.severity = none # Make field readonly [MesaFabApproval.API]", +dotnet_diagnostic.IDE0046.severity = none # "'if' statement can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0052.severity = none # Private member 'CustomerController._cache' can be removed as the value assigned to it is never read [MesaFabApproval.API]", +dotnet_diagnostic.IDE0074.severity = none # Use compound assignment [MesaFabApproval.API]", +dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [MesaFabApproval.API]", +dotnet_diagnostic.IDE0305.severity = none # Collection initialization can be simplified [MesaFabApproval.API]", +dotnet_style_prefer_conditional_expression_over_return = false \ No newline at end of file diff --git a/MesaFabApproval.API/.vscode/format-report.json b/MesaFabApproval.API/.vscode/format-report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/MesaFabApproval.API/.vscode/format-report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/MesaFabApproval.API/.vscode/launch.json b/MesaFabApproval.API/.vscode/launch.json new file mode 100644 index 0000000..3d5de85 --- /dev/null +++ b/MesaFabApproval.API/.vscode/launch.json @@ -0,0 +1,30 @@ +{ + // 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 (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/net8.0/MesaFabApproval.API.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + }, + { + "type": "node", + "request": "launch", + "name": "node Launch Current Opened File", + "program": "${file}" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.API/.vscode/mklink.md b/MesaFabApproval.API/.vscode/mklink.md new file mode 100644 index 0000000..22d6274 --- /dev/null +++ b/MesaFabApproval.API/.vscode/mklink.md @@ -0,0 +1,6 @@ +# mklink + +```bash 1731705389065 = 638673021890650000 = Fri Nov 15 2024 14:16:28 GMT-0700 (Mountain Standard Time) +mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\MesaFabApproval.API\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\0b98e1f2-95ed-4edd-8149-58cce51ca059" +dotnet run --urls=https://localhost:7114/ -C Release +``` \ No newline at end of file diff --git a/MesaFabApproval.API/.vscode/settings.json b/MesaFabApproval.API/.vscode/settings.json new file mode 100644 index 0000000..f05d843 --- /dev/null +++ b/MesaFabApproval.API/.vscode/settings.json @@ -0,0 +1,424 @@ +{ + "[markdown]": { + "editor.wordWrap": "off" + }, + "files.exclude": { + "**/.git": false, + "**/node_modules": true + }, + "files.watcherExclude": { + "**/node_modules": true + }, + "cSpell.words": [ + "abutton", + "accessibilities", + "accodingly", + "acknowledgmentby", + "Acks", + "actionsheet", + "Additonal", + "Addtional", + "againm", + "agendaview", + "Antlr", + "Appover", + "Appprrovers", + "Approvalog", + "Aprovers", + "Aproverslist", + "asax", + "aspnetmvc", + "Assignedto", + "Atachments", + "Attachemnt", + "Attachemnts", + "Attchment", + "auditee", + "Auditee", + "Auditees", + "automaically", + "Autthorized", + "beacuase", + "beforeunload", + "Belguim", + "bfound", + "bgcolor", + "Bies", + "binded", + "blackbackground", + "blackhover", + "blackpressed", + "blueenergy", + "blueopal", + "buttongroup", + "BYMRB", + "bytesgot", + "CAID", + "casection", + "CAXXXX", + "CCPCR", + "CCPCRB", + "cellspacing", + "Cheeso's", + "chkbx", + "Clib", + "colorpicker", + "columnmenu", + "columnsreorder", + "columnsresize", + "comming", + "Containmen", + "Copmments", + "correctiv", + "Correctivet", + "Creat", + "currentd", + "Cyle", + "dadada", + "darkbluehover", + "darkbluepressed", + "darkred", + "datafields", + "datasource", + "dataviz", + "datepicker", + "datetimepicker", + "dayview", + "Deletet", + "Delgation", + "DENITED", + "Deparmtent", + "departmentids", + "Descirption", + "devprog", + "dfeffc", + "Disp", + "Dispo", + "Dispoitio", + "Dispos", + "Dispositon", + "Dispostion", + "Dispostions", + "dispotypevalidation", + "Docbase", + "Documentum", + "Documetum", + "dont", + "downlaoded", + "draganddrop", + "dragcancel", + "dropdownlist", + "Eamils", + "ECNPCRB", + "Ecns", + "edmx", + "EECN", + "emai", + "emailparams", + "Emergrncy", + "energyblue", + "Eran", + "Esql", + "ETECN", + "EXCELOPENXML", + "existinglocation", + "Expando", + "extrafield", + "fadc", + "fbec", + "fcfdfd", + "fdff", + "fece", + "feeebd", + "ffdc", + "ffdd", + "fieldset", + "FILIPE", + "filtermenu", + "Fldr", + "flintstone", + "FLOWLOCS", + "FMEA", + "ftplib", + "FTPSPN", + "GETDATE", + "gitea", + "globaldocudms", + "glyphicons", + "groupable", + "Guids", + "halflings", + "Hexsize", + "highcontrast", + "Hmac", + "holdsteps", + "hostspecific", + "icenium", + "IECN", + "imagebrowser", + "IMRB", + "Infineon", + "Insertd", + "inverseicons", + "IPCRB", + "ISADMIN", + "islast", + "ISNULL", + "ITAR", + "jquery", + "jqueryval", + "jqwidgets", + "jqxbuttongroup", + "jqxbuttons", + "jqxcalendar", + "jqxchart", + "jqxcheckbox", + "jqxcolorpicker", + "jqxcombobox", + "jqxcore", + "jqxdata", + "jqxdatatable", + "jqxdatetimeinput", + "jqxdocking", + "jqxdockpanel", + "jqxdragdrop", + "jqxdropdownbutton", + "jqxdropdownlist", + "jqxexpander", + "jqxgauge", + "jqxgrid", + "jqxinput", + "jqxknockout", + "jqxlistbox", + "jqxlistmenu", + "jqxmaskedinput", + "jqxmenu", + "jqxnavigationbar", + "jqxnumberinput", + "jqxpanel", + "jqxpasswordinput", + "jqxprogressbar", + "jqxradiobutton", + "jqxrangeselector", + "jqxrating", + "jqxresponse", + "jqxscrollbar", + "jqxscrollview", + "jqxslider", + "jqxsplitter", + "jqxswitchbutton", + "jqxtabs", + "jqxtooltip", + "jqxtouch", + "jqxtree", + "jqxtreegrid", + "jqxtreemap", + "jqxvalidator", + "jqxwindow", + "kendogridcustom", + "kendoui", + "labelelement", + "labelledby", + "Leanred", + "lightgray", + "linkbutton", + "Linq", + "Listdiv", + "listview", + "Lnks", + "localfilename", + "loclist", + "logis", + "logtext", + "loopmis", + "lotdispo", + "LOTDISPSITION", + "Lotfile", + "lotlist", + "lotstatusoption", + "LTRIM", + "MADUREIRA", + "mailrelay", + "MDTM", + "meego", + "meetingid", + "menubutton", + "mesafi", + "metroblack", + "metrodark", + "miliseconds", + "modalview", + "modernizr", + "Modernizr", + "monthview", + "MRBIs", + "Mrbs", + "msecs", + "multipleextended", + "Navigatable", + "nbsp", + "newbase", + "newchange", + "newdi", + "newfilename", + "newsource", + "Newtonsoft", + "notications", + "Notifcation", + "Notifyf", + "NTLM", + "Nullcc", + "numerictextbox", + "objdata", + "OCAP", + "occured", + "odata", + "oldfilename", + "OLHOLD", + "onclick", + "onmousemove", + "OPDESC", + "OPENQUERY", + "Oper", + "operationslist", + "Orginator", + "Originatorname", + "Ouellette", + "Owin", + "pageable", + "Pageable", + "panelbar", + "parentid", + "parminput", + "parms", + "Parms", + "particula", + "pasv", + "PASV", + "PATINDEX", + "PCRB", + "PCRBID", + "pcrvalues", + "pdbonly", + "Preventitive", + "preventivet", + "Prevetative", + "proces", + "Processedl", + "procs", + "productfamilies", + "progess", + "progressbar", + "qrcode", + "Quanityt", + "rangebar", + "Recep", + "Recepient", + "recieved", + "recordlock", + "remotefilename", + "reorderable", + "reportform", + "reportslist", + "reportslistdiv", + "Reqquired", + "Reqs", + "Requiest", + "Responsibles", + "RETR", + "Revisioing", + "Revisioned", + "Revison", + "rgba", + "rkotian", + "RNFR", + "RNTO", + "Roless", + "roundbg", + "RTRIM", + "SAMDB", + "scroller", + "scrollview", + "seleced", + "selectionlog", + "Selectpart", + "sess", + "Sfisharepoint", + "shinyblack", + "showpassword", + "SIGNON", + "simpleparser", + "slddrw", + "sldprt", + "sortasc", + "sortascbutton", + "sortdesc", + "sortdescbutton", + "sortremove", + "sparkline", + "splitview", + "SPNMRB", + "SPNPDB", + "SSRS", + "Sssign", + "Staus", + "stylesheet", + "Submited", + "subrole", + "subroles", + "Succefully", + "Succesfully", + "sucessfully", + "SURP", + "Swashbuckle", + "SWRN", + "tabindex", + "tabstrip", + "Tahoma", + "taskcompleted", + "Tasklist", + "Taveler", + "TECN", + "TECNs", + "TEMIRWAP", + "tempecd", + "tempimplement", + "templabel", + "tempvalue", + "TEMSA", + "timepicker", + "Tobe", + "Toplevel", + "Totrav", + "trainingby", + "Traininglist", + "traininglistdiv", + "transanction", + "Trav", + "Traveller", + "Traverler", + "TRAVLELER", + "Travler", + "TREEVIEW", + "trigerred", + "ttinclude", + "Uhandled", + "Updat", + "Uplaod", + "Upto", + "userevents", + "userids", + "userlist", + "Validatable", + "valueelement", + "Variabls", + "Verdana", + "vgrid", + "viewmodel", + "vsdoc", + "whethere", + "windowsphone", + "Winsock", + "worlflow" + ] +} \ No newline at end of file diff --git a/MesaFabApproval.API/.vscode/tasks.json b/MesaFabApproval.API/.vscode/tasks.json new file mode 100644 index 0000000..8e9861e --- /dev/null +++ b/MesaFabApproval.API/.vscode/tasks.json @@ -0,0 +1,135 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "User Secrets Set", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "set", + "_UserSecretsId", + "0b98e1f2-95ed-4edd-8149-58cce51ca059" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "testDebug", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "testRelease", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary", + "-c", + "Release" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/MesaFabApproval.API.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/MesaFabApproval.API.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.API/Clients/SmtpClientWrapper.cs b/MesaFabApproval.API/Clients/SmtpClientWrapper.cs index d7d179a..82bf7a3 100644 --- a/MesaFabApproval.API/Clients/SmtpClientWrapper.cs +++ b/MesaFabApproval.API/Clients/SmtpClientWrapper.cs @@ -7,7 +7,7 @@ public interface ISmtpClientWrapper { } public class SmtpClientWrapper : ISmtpClientWrapper { - private SmtpClient _client; + private readonly SmtpClient _client; public SmtpClientWrapper(SmtpClient client) { _client = client ?? @@ -17,4 +17,4 @@ public class SmtpClientWrapper : ISmtpClientWrapper { public void Send(MailMessage message) { _client.Send(message); } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/ApprovalController.cs b/MesaFabApproval.API/Controllers/ApprovalController.cs index 7493433..aaa6257 100644 --- a/MesaFabApproval.API/Controllers/ApprovalController.cs +++ b/MesaFabApproval.API/Controllers/ApprovalController.cs @@ -398,4 +398,4 @@ public class ApprovalController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/AuthenticationController.cs b/MesaFabApproval.API/Controllers/AuthenticationController.cs index 1c51b6f..538e8fd 100644 --- a/MesaFabApproval.API/Controllers/AuthenticationController.cs +++ b/MesaFabApproval.API/Controllers/AuthenticationController.cs @@ -23,7 +23,7 @@ public class AuthenticationController : ControllerBase { IAuthenticationService authenticationService) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _monInClient = monInClient ?? throw new ArgumentNullException("IMonInWorkerClient not injected"); - _authenticationService = authenticationService ?? + _authenticationService = authenticationService ?? throw new ArgumentNullException("IAuthenticationService not injected"); } @@ -175,4 +175,4 @@ public class AuthenticationController : ControllerBase { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/CAController.cs b/MesaFabApproval.API/Controllers/CAController.cs index c714a35..8dc0eb5 100644 --- a/MesaFabApproval.API/Controllers/CAController.cs +++ b/MesaFabApproval.API/Controllers/CAController.cs @@ -53,4 +53,4 @@ public class CAController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/CustomerController.cs b/MesaFabApproval.API/Controllers/CustomerController.cs index 2313558..c29c586 100644 --- a/MesaFabApproval.API/Controllers/CustomerController.cs +++ b/MesaFabApproval.API/Controllers/CustomerController.cs @@ -54,4 +54,4 @@ public class CustomerController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/ECNController.cs b/MesaFabApproval.API/Controllers/ECNController.cs index 509379c..1b8d431 100644 --- a/MesaFabApproval.API/Controllers/ECNController.cs +++ b/MesaFabApproval.API/Controllers/ECNController.cs @@ -53,4 +53,4 @@ public class ECNController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/MRBController.cs b/MesaFabApproval.API/Controllers/MRBController.cs index 1de067f..3dbc88b 100644 --- a/MesaFabApproval.API/Controllers/MRBController.cs +++ b/MesaFabApproval.API/Controllers/MRBController.cs @@ -1,4 +1,5 @@ using MesaFabApproval.API.Services; +using MesaFabApproval.Models; using MesaFabApproval.Shared.Models; using MesaFabApproval.Shared.Services; @@ -17,12 +18,14 @@ public class MRBController : ControllerBase { private readonly string _mrbAttachmentPath; - public MRBController(ILogger logger, IMRBService mrbService, IMonInWorkerClient monInClient) { + public MRBController(ILogger logger, + IMRBService mrbService, + IMonInWorkerClient monInClient, + AppSettings appSettings) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _mrbService = mrbService ?? throw new ArgumentNullException("IMRBService not injected"); _monInClient = monInClient ?? throw new ArgumentNullException("IMonInWorkerClient not injected"); - _mrbAttachmentPath = Environment.GetEnvironmentVariable("FabApprovalMrbAttachmentPath") ?? - throw new ArgumentNullException("FabApprovalMrbAttachmentPath environment variable not found"); + _mrbAttachmentPath = appSettings.MrbAttachmentPath; } [HttpPost] @@ -523,7 +526,7 @@ public class MRBController : ControllerBase { if (mrbNumber <= 0) throw new ArgumentException($"{mrbNumber} is not a valid MRB#"); - List attachments = + List attachments = (await _mrbService.GetAllActionAttachmentsForMRB(mrbNumber, bypassCache)).ToList(); return Ok(attachments); @@ -969,4 +972,4 @@ public class MRBController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/PCRBController.cs b/MesaFabApproval.API/Controllers/PCRBController.cs index b24659c..f950583 100644 --- a/MesaFabApproval.API/Controllers/PCRBController.cs +++ b/MesaFabApproval.API/Controllers/PCRBController.cs @@ -1123,4 +1123,4 @@ public class PCRBController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Controllers/UserController.cs b/MesaFabApproval.API/Controllers/UserController.cs index 742b05d..f010b06 100644 --- a/MesaFabApproval.API/Controllers/UserController.cs +++ b/MesaFabApproval.API/Controllers/UserController.cs @@ -220,4 +220,4 @@ public class UserController : ControllerBase { } } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/GlobalSuppressions.cs b/MesaFabApproval.API/GlobalSuppressions.cs index 2eafe3f..520e0ba 100644 --- a/MesaFabApproval.API/GlobalSuppressions.cs +++ b/MesaFabApproval.API/GlobalSuppressions.cs @@ -6,4 +6,4 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "", Scope = "member", Target = "~M:MesaFabApprovalAPI.Services.AuthenticationService.AuthenticateUser(MesaFabApproval.Shared.Models.AuthAttempt)~System.Threading.Tasks.Task{MesaFabApproval.Shared.Models.LoginResult}")] -[assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "", Scope = "member", Target = "~M:MesaFabApprovalAPI.Services.AuthenticationService.AttemptLocalUserAuth(System.Security.Principal.WindowsIdentity)~System.Threading.Tasks.Task{MesaFabApproval.Shared.Models.LoginResult}")] +[assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "", Scope = "member", Target = "~M:MesaFabApprovalAPI.Services.AuthenticationService.AttemptLocalUserAuth(System.Security.Principal.WindowsIdentity)~System.Threading.Tasks.Task{MesaFabApproval.Shared.Models.LoginResult}")] \ No newline at end of file diff --git a/MesaFabApproval.API/MesaFabApproval.API.csproj b/MesaFabApproval.API/MesaFabApproval.API.csproj index 0c4532c..1ca74df 100644 --- a/MesaFabApproval.API/MesaFabApproval.API.csproj +++ b/MesaFabApproval.API/MesaFabApproval.API.csproj @@ -1,11 +1,10 @@  - net8.0 enable enable + 0b98e1f2-95ed-4edd-8149-58cce51ca059 - @@ -18,15 +17,12 @@ - - ..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.DirectoryServices.AccountManagement.dll - - + \ No newline at end of file diff --git a/MesaFabApproval.API/Models/AppSettings.cs b/MesaFabApproval.API/Models/AppSettings.cs new file mode 100644 index 0000000..6a11b1b --- /dev/null +++ b/MesaFabApproval.API/Models/AppSettings.cs @@ -0,0 +1,93 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace MesaFabApproval.Models; + +public record AppSettings(string Company, + string DbConnectionString, + string JwtAudience, + string JwtIssuer, + string JwtKey, + string MrbAttachmentPath, + string PcrbAttachmentPath, + bool ShouldSendEmail, + string SiteBaseUrl, + string WorkingDirectoryName) { + + public override string ToString() { + string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings); + return result; + } + + public static AppSettings Get(IConfigurationRoot configurationRoot) { + AppSettings? result; + try { +#pragma warning disable IL3050, IL2026 + result = configurationRoot.Get() ?? throw new Exception(); +#pragma warning restore IL3050, IL2026 + } catch (Exception) { + List paths = []; + foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) { + if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) + continue; + if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) + continue; + paths.Add(physicalFileProvider.Root); + } + + throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); + } + + return result; + } + + internal static void SetEnvironmentVariables(WebApplicationBuilder builder) { + builder.Configuration.AddUserSecrets(); + AppSettings appSettings = Get(builder.Configuration); + Environment.SetEnvironmentVariable("FabApprovalDbConnectionString", appSettings.DbConnectionString); + Environment.SetEnvironmentVariable("FabApprovalJwtAudience", appSettings.JwtAudience); + Environment.SetEnvironmentVariable("FabApprovalJwtIssuer", appSettings.JwtIssuer); + Environment.SetEnvironmentVariable("FabApprovalJwtKey", appSettings.JwtKey); + Environment.SetEnvironmentVariable("FabApprovalMrbAttachmentPath", appSettings.MrbAttachmentPath); + Environment.SetEnvironmentVariable("FabApprovalPcrbAttachmentPath", appSettings.PcrbAttachmentPath); + Environment.SetEnvironmentVariable("FabApprovalShouldSendEmail", appSettings.ShouldSendEmail.ToString()); + Environment.SetEnvironmentVariable("NewFabApprovalBaseUrl", appSettings.SiteBaseUrl); + } + + internal static AppSettings LoadEnvironmentVariables() { + AppSettings result; + string dbConnectionString = Environment.GetEnvironmentVariable("FabApprovalDbConnectionString") ?? + throw new ArgumentNullException("FabApprovalDbConnectionString environment variable not found"); + string jwtAudience = Environment.GetEnvironmentVariable("FabApprovalJwtAudience") ?? + throw new ArgumentNullException("FabApprovalJwtAudience environment variable not found"); + string jwtIssuer = Environment.GetEnvironmentVariable("FabApprovalJwtIssuer") ?? + throw new ArgumentNullException("FabApprovalJwtIssuer environment variable not found"); + string jwtKey = Environment.GetEnvironmentVariable("FabApprovalJwtKey") ?? + throw new ArgumentNullException("FabApprovalJwtKey environment variable not found"); + string mrbAttachmentPath = Environment.GetEnvironmentVariable("FabApprovalMrbAttachmentPath") ?? + throw new ArgumentNullException("FabApprovalMrbAttachmentPath environment variable not found"); + string pcrbAttachmentPath = Environment.GetEnvironmentVariable("FabApprovalPcrbAttachmentPath") ?? + throw new ArgumentNullException("FabApprovalPcrbAttachmentPath environment variable not found"); + if (!bool.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out bool shouldSendEmail)) + throw new ArgumentNullException("FabApprovalShouldSendEmail environment variable not found"); + string siteBaseUrl = Environment.GetEnvironmentVariable("NewFabApprovalBaseUrl") ?? + throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found"); + result = new("Infineon Technologies Americas Corp.", + DbConnectionString: dbConnectionString, + JwtAudience: jwtAudience, + JwtIssuer: jwtIssuer, + JwtKey: jwtKey, + MrbAttachmentPath: mrbAttachmentPath, + PcrbAttachmentPath: pcrbAttachmentPath, + ShouldSendEmail: shouldSendEmail, + SiteBaseUrl: siteBaseUrl, + "IFXApps"); + return result; + } +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(AppSettings))] +internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext { +} \ No newline at end of file diff --git a/MesaFabApproval.API/Program.cs b/MesaFabApproval.API/Program.cs index b1b94d3..56916bd 100644 --- a/MesaFabApproval.API/Program.cs +++ b/MesaFabApproval.API/Program.cs @@ -1,17 +1,24 @@ -using MesaFabApproval.Shared.Services; -using NLog.Web; -using MesaFabApprovalAPI.Services; -using Microsoft.OpenApi.Models; -using dotenv.net; -using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.IdentityModel.Tokens; -using System.Text; -using Microsoft.AspNetCore.Authorization; -using MesaFabApproval.API.Services; -using NLog.Extensions.Logging; -using MesaFabApproval.API.Clients; +using System.Diagnostics; using System.Net.Mail; +using System.Text; + +using dotenv.net; + +using MesaFabApproval.API.Clients; +using MesaFabApproval.API.Services; +using MesaFabApproval.Models; +using MesaFabApproval.Shared.Services; + +using MesaFabApprovalAPI.Services; + +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.HttpLogging; +using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi.Models; + +using NLog.Extensions.Logging; +using NLog.Web; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); @@ -21,7 +28,7 @@ builder.Logging.ClearProviders(); builder.Logging.SetMinimumLevel(LogLevel.Trace); builder.Logging.AddNLog(); -/*builder.Services.AddHttpLogging(o => { +/*builder.Services.AddHttpLogging(o => { o.LoggingFields = HttpLoggingFields.All; o.RequestHeaders.Add("bearer"); o.MediaTypeOptions.AddText("application/javascript"); @@ -32,25 +39,28 @@ builder.Logging.AddNLog(); builder.Services.AddMemoryCache(); -string jwtIssuer = Environment.GetEnvironmentVariable("FabApprovalJwtIssuer") ?? - throw new ArgumentNullException("FabApprovalJwtIssuer environment variable not found"); -string jwtAudience = Environment.GetEnvironmentVariable("FabApprovalJwtAudience") ?? - throw new ArgumentNullException("FabApprovalJwtAudience environment variable not found"); -string jwtKey = Environment.GetEnvironmentVariable("FabApprovalJwtKey") ?? - throw new ArgumentNullException("FabApprovalJwtKey environment variable not found"); +if (Debugger.IsAttached) { + string? jwtIssuer = Environment.GetEnvironmentVariable("FabApprovalJwtIssuer"); + if (string.IsNullOrEmpty(jwtIssuer)) { + AppSettings.SetEnvironmentVariables(builder); + } +} -builder.Services.AddAuthentication(options => { +AppSettings appSettings = AppSettings.LoadEnvironmentVariables(); +builder.Services.AddSingleton(_ => appSettings); + +builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) -.AddJwtBearer(options => { +.AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, - ValidIssuer = jwtIssuer, + ValidIssuer = appSettings.JwtIssuer, ValidateAudience = false, - IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey)), + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(appSettings.JwtKey)), ClockSkew = TimeSpan.Zero }; }); @@ -122,11 +132,13 @@ builder.Services.AddSwaggerGen(c => { WebApplication app = builder.Build(); +if (Debugger.IsAttached) + app.Services.GetRequiredService(); + app.UseCors(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ +if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } diff --git a/MesaFabApproval.API/Services/ApprovalService.cs b/MesaFabApproval.API/Services/ApprovalService.cs index 7e10c60..8871dd5 100644 --- a/MesaFabApproval.API/Services/ApprovalService.cs +++ b/MesaFabApproval.API/Services/ApprovalService.cs @@ -44,7 +44,7 @@ public class ApprovalService : IApprovalService { queryBuilder.Append($"values ({approval.IssueID}, '{approval.RoleName}', '{approval.SubRole}', {approval.UserID}, "); queryBuilder.Append($"{approval.SubRoleID}, 0, '{approval.AssignedDate.ToString("yyyy-MM-dd HH:mm:ss")}', "); queryBuilder.Append($"3, 0, {approval.Step}, {approval.TaskID});"); - + int rowsCreated = await _dalService.ExecuteAsync(queryBuilder.ToString()); if (rowsCreated <= 0) throw new Exception("Unable to insert approval in database"); @@ -63,7 +63,7 @@ public class ApprovalService : IApprovalService { if (issueId <= 0) throw new ArgumentException($"{issueId} is not a valid issue ID"); IEnumerable? approvals = new List(); - + if (!bypassCache) approvals = _cache.Get>($"approvals{issueId}"); @@ -78,7 +78,7 @@ public class ApprovalService : IApprovalService { foreach (Approval approval in approvals) { int successfulUpdates = 0; - + User? user = await _userService.GetUserByUserId(approval.UserID); if (user is not null) { approval.User = user; @@ -86,11 +86,11 @@ public class ApprovalService : IApprovalService { } if (approval.ItemStatus < 0) - approval.StatusMessage = "Denied"; + approval.StatusMessage = "Denied"; if (approval.ItemStatus == 0) - approval.StatusMessage = "Assigned"; + approval.StatusMessage = "Assigned"; if (approval.ItemStatus > 0) - approval.StatusMessage = "Approved"; + approval.StatusMessage = "Approved"; } _cache.Set($"approvals{issueId}", approvals, DateTimeOffset.Now.AddMinutes(5)); @@ -107,7 +107,7 @@ public class ApprovalService : IApprovalService { try { _logger.LogInformation($"Attempting to get role ID by name"); - if (string.IsNullOrWhiteSpace(roleName)) + if (string.IsNullOrWhiteSpace(roleName)) throw new ArgumentException("Role name cannot be null or empty"); int roleId = _cache.Get($"role{roleName}"); @@ -170,7 +170,7 @@ public class ApprovalService : IApprovalService { if (subRoleId <= 0) throw new ArgumentException($"{subRoleId} is not a valid sub role ID"); List? members = _cache.Get>($"approvalMembers{subRoleId}"); - + if (members is null || members.Count() <= 0) { IEnumerable? memberIds = _cache.Get>($"approvalMemberIds{subRoleId}"); @@ -211,7 +211,7 @@ public class ApprovalService : IApprovalService { if (userId <= 0) throw new ArgumentException($"{userId} is not a valid user ID"); IEnumerable? approvals = null; - + if (!bypassCache) approvals = _cache.Get>($"approvalMembers{userId}"); if (approvals is null) { @@ -317,4 +317,4 @@ public class ApprovalService : IApprovalService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/AuthenticationService.cs b/MesaFabApproval.API/Services/AuthenticationService.cs index 99c3973..d7ecb8a 100644 --- a/MesaFabApproval.API/Services/AuthenticationService.cs +++ b/MesaFabApproval.API/Services/AuthenticationService.cs @@ -7,6 +7,7 @@ using System.Security.Principal; using System.Text; using MesaFabApproval.API.Services; +using MesaFabApproval.Models; using MesaFabApproval.Shared.Models; using Microsoft.Extensions.Caching.Memory; @@ -30,17 +31,13 @@ public class AuthenticationService : IAuthenticationService { private readonly string _jwtAudience; private readonly string _jwtKey; - public AuthenticationService(ILogger logger, IMemoryCache cache, IUserService userService) { + public AuthenticationService(ILogger logger, IMemoryCache cache, IUserService userService, AppSettings appSettings) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _cache = cache ?? throw new ArgumentNullException("IMemoryCache not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected"); - - _jwtIssuer = Environment.GetEnvironmentVariable("FabApprovalJwtIssuer") ?? - throw new ArgumentNullException("FabApprovalJwtIssuer environment variable not found"); - _jwtAudience = Environment.GetEnvironmentVariable("FabApprovalJwtAudience") ?? - throw new ArgumentNullException("FabApprovalJwtAudience environment variable not found"); - _jwtKey = Environment.GetEnvironmentVariable("FabApprovalJwtKey") ?? - throw new ArgumentNullException("FabApprovalJwtKey environment variable not found"); + _jwtKey = appSettings.JwtKey; + _jwtIssuer = appSettings.JwtIssuer; + _jwtAudience = appSettings.JwtAudience; } public async Task AuthenticateUser(AuthAttempt login) { @@ -59,7 +56,7 @@ public class AuthenticationService : IAuthenticationService { if (user is null) { user = await _userService.GetUserByLoginId(login.LoginID); - + _cache.Set($"user{login.LoginID}", user, DateTimeOffset.Now.AddDays(1)); } @@ -77,8 +74,8 @@ public class AuthenticationService : IAuthenticationService { }; } else { return new LoginResult() { - IsAuthenticated= false, - AuthTokens = new() { + IsAuthenticated = false, + AuthTokens = new() { JwtToken = "", RefreshToken = "" }, @@ -105,7 +102,7 @@ public class AuthenticationService : IAuthenticationService { if (user.IsManager) roles.Add("manager"); if (user.IsAdmin) roles.Add("admin"); - AuthAttempt authAttempt = new() { + AuthAttempt authAttempt = new() { LoginID = user.LoginID, }; @@ -132,7 +129,7 @@ public class AuthenticationService : IAuthenticationService { byte[] key = Encoding.ASCII.GetBytes(_jwtKey); - List claims = new() { + List claims = new() { new Claim(nameof(authAttempt.LoginID), authAttempt.LoginID) }; @@ -171,7 +168,7 @@ public class AuthenticationService : IAuthenticationService { _cache.Set>(authAttempt.LoginID, refreshTokensForUser, DateTimeOffset.Now.AddHours(4)); - return new AuthTokens { + return new AuthTokens { JwtToken = jwt, RefreshToken = refreshToken }; @@ -251,4 +248,4 @@ public class AuthenticationService : IAuthenticationService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/CAService.cs b/MesaFabApproval.API/Services/CAService.cs index 342f6ec..301b7ee 100644 --- a/MesaFabApproval.API/Services/CAService.cs +++ b/MesaFabApproval.API/Services/CAService.cs @@ -43,4 +43,4 @@ public class CAService : ICAService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/CustomerService.cs b/MesaFabApproval.API/Services/CustomerService.cs index 2a185dd..c179cac 100644 --- a/MesaFabApproval.API/Services/CustomerService.cs +++ b/MesaFabApproval.API/Services/CustomerService.cs @@ -35,4 +35,4 @@ public class CustomerService : ICustomerService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/DalService.cs b/MesaFabApproval.API/Services/DalService.cs index 919fab0..de6adfb 100644 --- a/MesaFabApproval.API/Services/DalService.cs +++ b/MesaFabApproval.API/Services/DalService.cs @@ -86,4 +86,4 @@ public class DalService : IDalService { return rowsAffected; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/DbConnectionService.cs b/MesaFabApproval.API/Services/DbConnectionService.cs index 8d7f396..904f93d 100644 --- a/MesaFabApproval.API/Services/DbConnectionService.cs +++ b/MesaFabApproval.API/Services/DbConnectionService.cs @@ -1,5 +1,7 @@ using System.Data; +using MesaFabApproval.Models; + using Microsoft.Data.SqlClient; namespace MesaFabApproval.API.Services; @@ -11,12 +13,10 @@ public interface IDbConnectionService { public class DbConnectionService : IDbConnectionService { private readonly string _dbConnectionString; - public DbConnectionService() { - _dbConnectionString = Environment.GetEnvironmentVariable("FabApprovalDbConnectionString") ?? - throw new ArgumentNullException("FabApprovalDbConnectionString environment variable not found"); + public DbConnectionService(AppSettings appSettings) { + _dbConnectionString = appSettings.DbConnectionString; } - public IDbConnection GetConnection() { - return new SqlConnection(_dbConnectionString); - } -} + public IDbConnection GetConnection() => + new SqlConnection(_dbConnectionString); +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/ECNService.cs b/MesaFabApproval.API/Services/ECNService.cs index 4032d0d..5a89462 100644 --- a/MesaFabApproval.API/Services/ECNService.cs +++ b/MesaFabApproval.API/Services/ECNService.cs @@ -43,4 +43,4 @@ public class ECNService : IECNService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/MRBService.cs b/MesaFabApproval.API/Services/MRBService.cs index 3a5ae80..e544a35 100644 --- a/MesaFabApproval.API/Services/MRBService.cs +++ b/MesaFabApproval.API/Services/MRBService.cs @@ -4,6 +4,7 @@ using System.Net.Mail; using System.Text; using MesaFabApproval.API.Utilities; +using MesaFabApproval.Models; using MesaFabApproval.Shared.Models; using MesaFabApproval.Shared.Utilities; @@ -51,17 +52,16 @@ public class MRBService : IMRBService { IMemoryCache cache, IUserService userService, IApprovalService approvalService, - ISmtpService smtpService) { + ISmtpService smtpService, + AppSettings appSettings) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); _cache = cache ?? throw new ArgumentNullException("IMemoryCache not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected"); _approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected"); _smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected"); - _siteBaseUrl = Environment.GetEnvironmentVariable("NewFabApprovalBaseUrl") ?? - throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found"); - _mrbAttachmentPath = Environment.GetEnvironmentVariable("FabApprovalMrbAttachmentPath") ?? - throw new ArgumentNullException("FabApprovalMrbAttachmentPath environment variable not found"); + _siteBaseUrl = appSettings.SiteBaseUrl; + _mrbAttachmentPath = appSettings.MrbAttachmentPath; } public async Task CreateNewMRB(MRB mrb) { try { @@ -100,7 +100,7 @@ public class MRBService : IMRBService { if (rowsCreated <= 0) throw new Exception("Unable to create new MRB"); mrb = await GetMRBByTitle(mrb.Title, true); - + _cache.Set($"mrb{mrb.MRBNumber}", mrb, DateTimeOffset.Now.AddHours(1)); _cache.Set($"mrb{mrb.Title}", mrb, DateTimeOffset.Now.AddHours(1)); @@ -160,7 +160,7 @@ public class MRBService : IMRBService { _cache.Set("mrbNumbers", mrbNumbers); return true; } - + return false; } catch (Exception ex) { _logger.LogError($"Unable to determine if {number} is a valid MRB#, because {ex.Message}"); @@ -205,7 +205,7 @@ public class MRBService : IMRBService { if (string.IsNullOrWhiteSpace(title)) throw new ArgumentException("Title cannot be null or empty"); MRB? mrb = null; - + if (!bypassCache) mrb = _cache.Get($"mrb{title}"); if (mrb is null) { @@ -275,7 +275,7 @@ public class MRBService : IMRBService { IEnumerable? allMrbs = _cache.Get>("allMrbs"); if (allMrbs is not null) { List mrbList = allMrbs.ToList(); - mrbList.RemoveAll(m => m.MRBNumber ==mrb.MRBNumber); + mrbList.RemoveAll(m => m.MRBNumber == mrb.MRBNumber); mrbList.Add(mrb); _cache.Set("allMrbs", mrbList, DateTimeOffset.Now.AddHours(1)); } @@ -302,7 +302,6 @@ public class MRBService : IMRBService { if (rowsAffected <= 0) throw new Exception("Unable to create MRB action in database"); - } catch (Exception ex) { _logger.LogError($"An exception occurred when attempting to create new MRB action. Exception: {ex.Message}"); throw; @@ -316,7 +315,7 @@ public class MRBService : IMRBService { if (mrbNumber <= 0) throw new ArgumentException($"{mrbNumber} is not a valid MRB number"); IEnumerable? mrbActions = null; - + if (!bypassCache) _cache.Get>($"mrbActions{mrbNumber}"); @@ -542,7 +541,7 @@ public class MRBService : IMRBService { foreach (MRBAction action in await GetMRBActionsForMRB(mrbNumber, false)) { string sql = $"select * from MRBActionAttachment where ActionID = {action.ActionID};"; - IEnumerable newAttachments = + IEnumerable newAttachments = (await _dalService.QueryAsync(sql)).ToList(); attachments.AddRange(newAttachments); @@ -574,7 +573,7 @@ public class MRBService : IMRBService { int rowsDeleted = await _dalService.ExecuteAsync(sql); - if (rowsDeleted <= 0) + if (rowsDeleted <= 0) throw new Exception($"No attachments found in the database with attachment ID {attachment.AttachmentID}"); } catch (Exception ex) { _logger.LogError($"An exception occurred when attempting to delete an attachment. Exception: {ex.Message}"); @@ -781,7 +780,7 @@ public class MRBService : IMRBService { sw.Write(sw.NewLine); - foreach (DataRow dr in dt.Rows) { + foreach (DataRow dr in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { if (!Convert.IsDBNull(dr[i])) { string? value = dr[i].ToString(); @@ -838,7 +837,7 @@ public class MRBService : IMRBService { string convertFromPart = string.Empty; string convertToCustomer = string.Empty; string convertToPart = string.Empty; - + string[] convertFrom = action.ConvertFrom.Split(" "); if (convertFrom.Length > 1) { convertFromCustomer = convertFrom[0]; @@ -936,4 +935,4 @@ public class MRBService : IMRBService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/PCRBService.cs b/MesaFabApproval.API/Services/PCRBService.cs index 228214b..a71694d 100644 --- a/MesaFabApproval.API/Services/PCRBService.cs +++ b/MesaFabApproval.API/Services/PCRBService.cs @@ -3,6 +3,7 @@ using System.Net.Mail; using System.Text; using MesaFabApproval.API.Utilities; +using MesaFabApproval.Models; using MesaFabApproval.Shared.Models; using MesaFabApproval.Shared.Utilities; @@ -54,18 +55,17 @@ public class PCRBService : IPCRBService { IMemoryCache cache, IUserService userService, IApprovalService approvalService, - ISmtpService smtpService) { + ISmtpService smtpService, + AppSettings appSettings) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _dalService = dalService ?? throw new ArgumentNullException("IDalService not injected"); _cache = cache ?? throw new ArgumentNullException("IMemoryCache not injected"); _userService = userService ?? throw new ArgumentNullException("IUserService not injected"); - _pcrbAttachmentPath = Environment.GetEnvironmentVariable("FabApprovalPcrbAttachmentPath") ?? - throw new ArgumentNullException("FabApprovalPcrbAttachmentPath environment variable not found"); _approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected"); _smtpService = smtpService ?? throw new ArgumentNullException("ISmtpService not injected"); - _siteBaseUrl = Environment.GetEnvironmentVariable("NewFabApprovalBaseUrl") ?? - throw new ArgumentNullException("FabApprovalBaseUrl environment variable not found"); + _siteBaseUrl = appSettings.SiteBaseUrl; + _pcrbAttachmentPath = appSettings.PcrbAttachmentPath; } public async Task CreateNewPCRB(PCRB pcrb) { @@ -295,7 +295,7 @@ public class PCRBService : IPCRBService { IEnumerable? attachments = null; - if (!bypassCache) + if (!bypassCache) attachments = _cache.Get>($"pcrbAttachments{planNumber}"); if (attachments is null) { @@ -609,7 +609,7 @@ public class PCRBService : IPCRBService { IEnumerable approvals = await _approvalService.GetApprovalsForIssueId(pcrb.PlanNumber, true); - List approvalsNeedingNotification = approvals.Where(a => a.Step == pcrb.CurrentStep && + List approvalsNeedingNotification = approvals.Where(a => a.Step == pcrb.CurrentStep && a.NotifyDate <= DateTimeUtilities.MIN_DT && a.AssignedDate > DateTimeUtilities.MIN_DT).ToList(); @@ -764,4 +764,4 @@ public class PCRBService : IPCRBService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/SmtpService.cs b/MesaFabApproval.API/Services/SmtpService.cs index 2b49762..110e3cc 100644 --- a/MesaFabApproval.API/Services/SmtpService.cs +++ b/MesaFabApproval.API/Services/SmtpService.cs @@ -1,9 +1,10 @@ -using MesaFabApproval.API.Clients; +using System.Net.Mail; + +using MesaFabApproval.API.Clients; +using MesaFabApproval.Models; using Microsoft.IdentityModel.Tokens; -using System.Net.Mail; - namespace MesaFabApproval.API.Services; public interface ISmtpService { @@ -15,13 +16,12 @@ public class SmtpService : ISmtpService { private readonly ISmtpClientWrapper _smtpClient; private readonly bool _shouldSendEmail; - public SmtpService(ILogger logger, ISmtpClientWrapper smtpClient) { + public SmtpService(ILogger logger, ISmtpClientWrapper smtpClient, AppSettings appSettings) { _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); _smtpClient = smtpClient ?? throw new ArgumentNullException("SmtpClient not injected"); - if (!Boolean.TryParse(Environment.GetEnvironmentVariable("FabApprovalShouldSendEmail"), out _shouldSendEmail)) - throw new ArgumentNullException("FabApprovalShouldSendEmail environment variable not found"); + _shouldSendEmail = appSettings.ShouldSendEmail; } public async Task SendEmail(IEnumerable recipients, @@ -32,7 +32,7 @@ public class SmtpService : ISmtpService { if (ccRecipients is null) throw new ArgumentNullException("ccRecipients cannot be null!"); if (subject.IsNullOrEmpty()) throw new ArgumentNullException("subject cannot be null or empty!"); if (body.IsNullOrEmpty()) throw new ArgumentNullException("body cannot be null or empty!"); - + return await Task.Run(() => { int maxRetries = 3; int backoffSeconds = 30; @@ -76,4 +76,4 @@ public class SmtpService : ISmtpService { return messageWasSent; }); } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Services/UserService.cs b/MesaFabApproval.API/Services/UserService.cs index 2909038..299d978 100644 --- a/MesaFabApproval.API/Services/UserService.cs +++ b/MesaFabApproval.API/Services/UserService.cs @@ -144,4 +144,4 @@ public class UserService : IUserService { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.API/Utilities/FileUtilities.cs b/MesaFabApproval.API/Utilities/FileUtilities.cs index cdd7e59..5cd3ea2 100644 --- a/MesaFabApproval.API/Utilities/FileUtilities.cs +++ b/MesaFabApproval.API/Utilities/FileUtilities.cs @@ -28,4 +28,4 @@ public class FileUtilities { throw; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Client/.vscode/format-report.json b/MesaFabApproval.Client/.vscode/format-report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/MesaFabApproval.Client/.vscode/format-report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/MesaFabApproval.Client/.vscode/launch.json b/MesaFabApproval.Client/.vscode/launch.json new file mode 100644 index 0000000..3d5de85 --- /dev/null +++ b/MesaFabApproval.Client/.vscode/launch.json @@ -0,0 +1,30 @@ +{ + // 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 (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/net8.0/MesaFabApproval.API.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + }, + { + "type": "node", + "request": "launch", + "name": "node Launch Current Opened File", + "program": "${file}" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.Client/.vscode/mklink.md b/MesaFabApproval.Client/.vscode/mklink.md new file mode 100644 index 0000000..22d6274 --- /dev/null +++ b/MesaFabApproval.Client/.vscode/mklink.md @@ -0,0 +1,6 @@ +# mklink + +```bash 1731705389065 = 638673021890650000 = Fri Nov 15 2024 14:16:28 GMT-0700 (Mountain Standard Time) +mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\MesaFabApproval.API\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\0b98e1f2-95ed-4edd-8149-58cce51ca059" +dotnet run --urls=https://localhost:7114/ -C Release +``` \ No newline at end of file diff --git a/MesaFabApproval.Client/.vscode/settings.json b/MesaFabApproval.Client/.vscode/settings.json new file mode 100644 index 0000000..f05d843 --- /dev/null +++ b/MesaFabApproval.Client/.vscode/settings.json @@ -0,0 +1,424 @@ +{ + "[markdown]": { + "editor.wordWrap": "off" + }, + "files.exclude": { + "**/.git": false, + "**/node_modules": true + }, + "files.watcherExclude": { + "**/node_modules": true + }, + "cSpell.words": [ + "abutton", + "accessibilities", + "accodingly", + "acknowledgmentby", + "Acks", + "actionsheet", + "Additonal", + "Addtional", + "againm", + "agendaview", + "Antlr", + "Appover", + "Appprrovers", + "Approvalog", + "Aprovers", + "Aproverslist", + "asax", + "aspnetmvc", + "Assignedto", + "Atachments", + "Attachemnt", + "Attachemnts", + "Attchment", + "auditee", + "Auditee", + "Auditees", + "automaically", + "Autthorized", + "beacuase", + "beforeunload", + "Belguim", + "bfound", + "bgcolor", + "Bies", + "binded", + "blackbackground", + "blackhover", + "blackpressed", + "blueenergy", + "blueopal", + "buttongroup", + "BYMRB", + "bytesgot", + "CAID", + "casection", + "CAXXXX", + "CCPCR", + "CCPCRB", + "cellspacing", + "Cheeso's", + "chkbx", + "Clib", + "colorpicker", + "columnmenu", + "columnsreorder", + "columnsresize", + "comming", + "Containmen", + "Copmments", + "correctiv", + "Correctivet", + "Creat", + "currentd", + "Cyle", + "dadada", + "darkbluehover", + "darkbluepressed", + "darkred", + "datafields", + "datasource", + "dataviz", + "datepicker", + "datetimepicker", + "dayview", + "Deletet", + "Delgation", + "DENITED", + "Deparmtent", + "departmentids", + "Descirption", + "devprog", + "dfeffc", + "Disp", + "Dispo", + "Dispoitio", + "Dispos", + "Dispositon", + "Dispostion", + "Dispostions", + "dispotypevalidation", + "Docbase", + "Documentum", + "Documetum", + "dont", + "downlaoded", + "draganddrop", + "dragcancel", + "dropdownlist", + "Eamils", + "ECNPCRB", + "Ecns", + "edmx", + "EECN", + "emai", + "emailparams", + "Emergrncy", + "energyblue", + "Eran", + "Esql", + "ETECN", + "EXCELOPENXML", + "existinglocation", + "Expando", + "extrafield", + "fadc", + "fbec", + "fcfdfd", + "fdff", + "fece", + "feeebd", + "ffdc", + "ffdd", + "fieldset", + "FILIPE", + "filtermenu", + "Fldr", + "flintstone", + "FLOWLOCS", + "FMEA", + "ftplib", + "FTPSPN", + "GETDATE", + "gitea", + "globaldocudms", + "glyphicons", + "groupable", + "Guids", + "halflings", + "Hexsize", + "highcontrast", + "Hmac", + "holdsteps", + "hostspecific", + "icenium", + "IECN", + "imagebrowser", + "IMRB", + "Infineon", + "Insertd", + "inverseicons", + "IPCRB", + "ISADMIN", + "islast", + "ISNULL", + "ITAR", + "jquery", + "jqueryval", + "jqwidgets", + "jqxbuttongroup", + "jqxbuttons", + "jqxcalendar", + "jqxchart", + "jqxcheckbox", + "jqxcolorpicker", + "jqxcombobox", + "jqxcore", + "jqxdata", + "jqxdatatable", + "jqxdatetimeinput", + "jqxdocking", + "jqxdockpanel", + "jqxdragdrop", + "jqxdropdownbutton", + "jqxdropdownlist", + "jqxexpander", + "jqxgauge", + "jqxgrid", + "jqxinput", + "jqxknockout", + "jqxlistbox", + "jqxlistmenu", + "jqxmaskedinput", + "jqxmenu", + "jqxnavigationbar", + "jqxnumberinput", + "jqxpanel", + "jqxpasswordinput", + "jqxprogressbar", + "jqxradiobutton", + "jqxrangeselector", + "jqxrating", + "jqxresponse", + "jqxscrollbar", + "jqxscrollview", + "jqxslider", + "jqxsplitter", + "jqxswitchbutton", + "jqxtabs", + "jqxtooltip", + "jqxtouch", + "jqxtree", + "jqxtreegrid", + "jqxtreemap", + "jqxvalidator", + "jqxwindow", + "kendogridcustom", + "kendoui", + "labelelement", + "labelledby", + "Leanred", + "lightgray", + "linkbutton", + "Linq", + "Listdiv", + "listview", + "Lnks", + "localfilename", + "loclist", + "logis", + "logtext", + "loopmis", + "lotdispo", + "LOTDISPSITION", + "Lotfile", + "lotlist", + "lotstatusoption", + "LTRIM", + "MADUREIRA", + "mailrelay", + "MDTM", + "meego", + "meetingid", + "menubutton", + "mesafi", + "metroblack", + "metrodark", + "miliseconds", + "modalview", + "modernizr", + "Modernizr", + "monthview", + "MRBIs", + "Mrbs", + "msecs", + "multipleextended", + "Navigatable", + "nbsp", + "newbase", + "newchange", + "newdi", + "newfilename", + "newsource", + "Newtonsoft", + "notications", + "Notifcation", + "Notifyf", + "NTLM", + "Nullcc", + "numerictextbox", + "objdata", + "OCAP", + "occured", + "odata", + "oldfilename", + "OLHOLD", + "onclick", + "onmousemove", + "OPDESC", + "OPENQUERY", + "Oper", + "operationslist", + "Orginator", + "Originatorname", + "Ouellette", + "Owin", + "pageable", + "Pageable", + "panelbar", + "parentid", + "parminput", + "parms", + "Parms", + "particula", + "pasv", + "PASV", + "PATINDEX", + "PCRB", + "PCRBID", + "pcrvalues", + "pdbonly", + "Preventitive", + "preventivet", + "Prevetative", + "proces", + "Processedl", + "procs", + "productfamilies", + "progess", + "progressbar", + "qrcode", + "Quanityt", + "rangebar", + "Recep", + "Recepient", + "recieved", + "recordlock", + "remotefilename", + "reorderable", + "reportform", + "reportslist", + "reportslistdiv", + "Reqquired", + "Reqs", + "Requiest", + "Responsibles", + "RETR", + "Revisioing", + "Revisioned", + "Revison", + "rgba", + "rkotian", + "RNFR", + "RNTO", + "Roless", + "roundbg", + "RTRIM", + "SAMDB", + "scroller", + "scrollview", + "seleced", + "selectionlog", + "Selectpart", + "sess", + "Sfisharepoint", + "shinyblack", + "showpassword", + "SIGNON", + "simpleparser", + "slddrw", + "sldprt", + "sortasc", + "sortascbutton", + "sortdesc", + "sortdescbutton", + "sortremove", + "sparkline", + "splitview", + "SPNMRB", + "SPNPDB", + "SSRS", + "Sssign", + "Staus", + "stylesheet", + "Submited", + "subrole", + "subroles", + "Succefully", + "Succesfully", + "sucessfully", + "SURP", + "Swashbuckle", + "SWRN", + "tabindex", + "tabstrip", + "Tahoma", + "taskcompleted", + "Tasklist", + "Taveler", + "TECN", + "TECNs", + "TEMIRWAP", + "tempecd", + "tempimplement", + "templabel", + "tempvalue", + "TEMSA", + "timepicker", + "Tobe", + "Toplevel", + "Totrav", + "trainingby", + "Traininglist", + "traininglistdiv", + "transanction", + "Trav", + "Traveller", + "Traverler", + "TRAVLELER", + "Travler", + "TREEVIEW", + "trigerred", + "ttinclude", + "Uhandled", + "Updat", + "Uplaod", + "Upto", + "userevents", + "userids", + "userlist", + "Validatable", + "valueelement", + "Variabls", + "Verdana", + "vgrid", + "viewmodel", + "vsdoc", + "whethere", + "windowsphone", + "Winsock", + "worlflow" + ] +} \ No newline at end of file diff --git a/MesaFabApproval.Client/.vscode/tasks.json b/MesaFabApproval.Client/.vscode/tasks.json new file mode 100644 index 0000000..97b85e8 --- /dev/null +++ b/MesaFabApproval.Client/.vscode/tasks.json @@ -0,0 +1,121 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "User Secrets Init", + "command": "dotnet", + "type": "process", + "args": [ + "user-secrets", + "-p", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "init" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "testDebug", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "testRelease", + "command": "dotnet", + "type": "process", + "args": [ + "test", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary", + "-c", + "Release" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/MesaFabApproval.Client.csproj" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Publish AOT", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "-r", + "win-x64", + "-c", + "Release", + "-p:PublishAot=true", + "${workspaceFolder}/MesaFabApproval.Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/.editorconfig b/MesaFabApproval.Shared/.editorconfig new file mode 100644 index 0000000..77286d1 --- /dev/null +++ b/MesaFabApproval.Shared/.editorconfig @@ -0,0 +1,262 @@ +# Remove the line below if you want to inherit .editorconfig settings from higher directories +root = true + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +indent_style = space +tab_width = 4 + +# New line preferences +end_of_line = crlf +insert_final_newline = false + +#### .NET Coding Conventions #### + +# Organize usings +dotnet_separate_import_directive_groups = true +dotnet_sort_system_directives_first = true +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = true +dotnet_style_qualification_for_field = true +dotnet_style_qualification_for_method = true +dotnet_style_qualification_for_property = true + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true +dotnet_style_predefined_type_for_member_access = true + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:error +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:error +dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:error + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members + +# Expression-level preferences +dotnet_style_coalesce_expression = false +dotnet_style_collection_initializer = true +dotnet_style_explicit_tuple_names = true:error +dotnet_style_namespace_match_folder = true +dotnet_style_null_propagation = true +dotnet_style_object_initializer = true +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true +dotnet_style_prefer_compound_assignment = true +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed +dotnet_style_prefer_inferred_anonymous_type_member_names = false +dotnet_style_prefer_inferred_tuple_names = false +dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_style_prefer_simplified_boolean_expressions = true +dotnet_style_prefer_simplified_interpolation = true + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:error + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +# New line preferences +dotnet_style_allow_multiple_blank_lines_experimental = false:error +dotnet_style_allow_statement_immediately_after_block_experimental = false:warning + +#### C# Coding Conventions #### + +# var preferences +csharp_style_var_elsewhere = false:error +csharp_style_var_for_built_in_types = false:error +csharp_style_var_when_type_is_apparent = false:error + +# Expression-bodied members +csharp_style_expression_bodied_accessors = false +csharp_style_expression_bodied_constructors = false +csharp_style_expression_bodied_indexers = false +csharp_style_expression_bodied_lambdas = true +csharp_style_expression_bodied_local_functions = false +csharp_style_expression_bodied_methods = when_on_single_line:suggestion +csharp_style_expression_bodied_operators = false +csharp_style_expression_bodied_properties = false + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = false +csharp_style_pattern_matching_over_is_with_cast_check = false +csharp_style_prefer_extended_property_pattern = true +csharp_style_prefer_not_pattern = true +csharp_style_prefer_pattern_matching = true +csharp_style_prefer_switch_expression = false + +# Null-checking preferences +csharp_style_conditional_delegate_call = false + +# Modifier preferences +csharp_prefer_static_local_function = false +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async +csharp_style_prefer_readonly_struct = true:warning +csharp_style_prefer_readonly_struct_member = true + +# Code-block preferences +csharp_prefer_braces = when_multiline:error +csharp_prefer_simple_using_statement = false +csharp_style_namespace_declarations = file_scoped:error +csharp_style_prefer_method_group_conversion = true:suggestion +csharp_style_prefer_top_level_statements = true:error + +# Expression-level preferences +csharp_prefer_simple_default_expression = true +csharp_style_deconstructed_variable_declaration = false +csharp_style_implicit_object_creation_when_type_is_apparent = false +csharp_style_inlined_variable_declaration = true +csharp_style_prefer_index_operator = false:error +csharp_style_prefer_local_over_anonymous_function = true:error +csharp_style_prefer_null_check_over_type_check = true +csharp_style_prefer_range_operator = false:error +csharp_style_prefer_tuple_swap = true +csharp_style_prefer_utf8_string_literals = true +csharp_style_throw_expression = false +csharp_style_unused_value_assignment_preference = unused_local_variable +csharp_style_unused_value_expression_statement_preference = unused_local_variable + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:error + +# New line preferences +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:error +csharp_style_allow_embedded_statements_on_same_line_experimental = true + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = false +csharp_new_line_before_else = false +csharp_new_line_before_finally = false +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = none +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_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_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### + +# Naming rules + +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.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.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 + +# Question + +dotnet_diagnostic.ASP0025.severity = none # Use AddAuthorizationBuilder to register authorization services and construct policies [MesaFabApproval.API]", +dotnet_diagnostic.CA1510.severity = none # Use 'ArgumentNullException.ThrowIfNull' instead of explicitly throwing a new exception instance [MesaFabApproval.API]", +dotnet_diagnostic.CA1806.severity = none # 'MRBNumberIsValid' calls 'Append' but does not use the value the method returns. Linq methods are known to not have side effects. Use the result in a conditional statement, assign the result to a variable, or pass it as an argument to another method. [MesaFabApproval.API]", +dotnet_diagnostic.CA1822.severity = none # Member 'GenerateRefreshToken' does not access instance data and can be marked as static [MesaFabApproval.API]", +dotnet_diagnostic.CA1825.severity = none # Avoid unnecessary zero-length array allocations. Use Array.Empty() instead. [MesaFabApproval.API]", +dotnet_diagnostic.CA1827.severity = none # Count() is used where Any() could be used instead to improve performance [MesaFabApproval.API]", +dotnet_diagnostic.CA1829.severity = none # Use the \"Count\" property instead of Enumerable.Count() [MesaFabApproval.API]", +dotnet_diagnostic.CA1861.severity = none # Prefer 'static readonly' fields over constant array arguments if the called method is called repeatedly and is not mutating the passed array [MesaFabApproval.API]", +dotnet_diagnostic.CA2208.severity = none # Method UpdateMRBAction passes 'MRB action cannot be null' as the paramName argument to a ArgumentNullException constructor. Replace this argument with one of the method's parameter names. Note that the provided parameter name should have the exact casing as declared on the method. [MesaFabApproval.API]", +dotnet_diagnostic.CA2211.severity = none # Non-constant fields should not be visible +dotnet_diagnostic.CA2254.severity = none # The type or namespace name 'AspNetCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS0234.severity = none # The type or namespace name 'Extensions' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS0246.severity = none # The type or namespace name 'ILogger<>' could not be found (are you missing a using directive or an assembly reference?) [MesaFabApproval.Shared]", +dotnet_diagnostic.CS1998.severity = none # This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [MesaFabApproval.API]", +dotnet_diagnostic.CS8019.severity = none # Unnecessary using directive +dotnet_diagnostic.CS8600.severity = none # Converting null literal or possible null value to non-nullable type. [MesaFabApproval.API]", +dotnet_diagnostic.CS8625.severity = none # Cannot convert null literal to non-nullable reference type. [MesaFabApproval.API]", +dotnet_diagnostic.CS8765.severity = none # Nullability of type of parameter 'obj' doesn't match overridden member (possibly because of nullability attributes). [MesaFabApproval.Shared]", +dotnet_diagnostic.IDE0001.severity = none # Name can be simplified +dotnet_diagnostic.IDE0017.severity = none # Object initialization can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0022.severity = none # Use expression body for method [MesaFabApproval.Shared]", +dotnet_diagnostic.IDE0028.severity = none # Collection initialization can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0044.severity = none # Make field readonly [MesaFabApproval.API]", +dotnet_diagnostic.IDE0046.severity = none # "'if' statement can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE0052.severity = none # Private member 'CustomerController._cache' can be removed as the value assigned to it is never read [MesaFabApproval.API]", +dotnet_diagnostic.IDE0074.severity = none # Use compound assignment [MesaFabApproval.API]", +dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [MesaFabApproval.API]", +dotnet_diagnostic.IDE0305.severity = none # Collection initialization can be simplified [MesaFabApproval.API]", +dotnet_diagnostic.IDE1006.severity = none # Naming rule violation: These words must begin with upper case characters +dotnet_style_prefer_conditional_expression_over_return = false \ No newline at end of file diff --git a/MesaFabApproval.Shared/.vscode/format-report.json b/MesaFabApproval.Shared/.vscode/format-report.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/MesaFabApproval.Shared/.vscode/format-report.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/MesaFabApproval.Shared/.vscode/mklink.md b/MesaFabApproval.Shared/.vscode/mklink.md new file mode 100644 index 0000000..22d6274 --- /dev/null +++ b/MesaFabApproval.Shared/.vscode/mklink.md @@ -0,0 +1,6 @@ +# mklink + +```bash 1731705389065 = 638673021890650000 = Fri Nov 15 2024 14:16:28 GMT-0700 (Mountain Standard Time) +mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\MesaFabApproval.API\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\0b98e1f2-95ed-4edd-8149-58cce51ca059" +dotnet run --urls=https://localhost:7114/ -C Release +``` \ No newline at end of file diff --git a/MesaFabApproval.Shared/.vscode/settings.json b/MesaFabApproval.Shared/.vscode/settings.json new file mode 100644 index 0000000..b25a803 --- /dev/null +++ b/MesaFabApproval.Shared/.vscode/settings.json @@ -0,0 +1,429 @@ +{ + "[markdown]": { + "editor.wordWrap": "off" + }, + "files.exclude": { + "**/.git": false, + "**/node_modules": true + }, + "files.watcherExclude": { + "**/node_modules": true + }, + "cSpell.words": [ + "abutton", + "accessibilities", + "accodingly", + "acknowledgmentby", + "Acks", + "actionsheet", + "Additonal", + "Addtional", + "againm", + "agendaview", + "AHPS", + "Akrion", + "Antlr", + "Appover", + "Appprrovers", + "Approvalog", + "Aprovers", + "Aproverslist", + "asax", + "aspnetmvc", + "Assignedto", + "Atachments", + "Attachemnt", + "Attachemnts", + "Attchment", + "auditee", + "Auditee", + "Auditees", + "automaically", + "Autthorized", + "beacuase", + "beforeunload", + "Belguim", + "bfound", + "bgcolor", + "Bies", + "binded", + "Biorad", + "blackbackground", + "blackhover", + "blackpressed", + "blueenergy", + "blueopal", + "buttongroup", + "BYMRB", + "bytesgot", + "CAID", + "casection", + "CAXXXX", + "CCPCR", + "CCPCRB", + "cellspacing", + "Cheeso's", + "chkbx", + "Clib", + "colorpicker", + "columnmenu", + "columnsreorder", + "columnsresize", + "comming", + "Containmen", + "Copmments", + "correctiv", + "Correctivet", + "Creat", + "currentd", + "Cyle", + "dadada", + "darkbluehover", + "darkbluepressed", + "darkred", + "datafields", + "datasource", + "dataviz", + "datepicker", + "datetimepicker", + "dayview", + "Deletet", + "Delgation", + "DENITED", + "Deparmtent", + "departmentids", + "Descirption", + "devprog", + "dfeffc", + "Disp", + "Dispo", + "Dispoitio", + "Dispos", + "Dispositon", + "Dispostion", + "Dispostions", + "dispotypevalidation", + "Docbase", + "Documentum", + "Documetum", + "dont", + "downlaoded", + "draganddrop", + "dragcancel", + "dropdownlist", + "Eamils", + "ECNPCRB", + "Ecns", + "edmx", + "EECN", + "emai", + "emailparams", + "Emergrncy", + "energyblue", + "Eran", + "Esql", + "ETECN", + "EXCELOPENXML", + "existinglocation", + "Expando", + "extrafield", + "fadc", + "fbec", + "fcfdfd", + "fdff", + "fece", + "feeebd", + "ffdc", + "ffdd", + "fieldset", + "FILIPE", + "filtermenu", + "Fldr", + "flintstone", + "FLOWLOCS", + "FMEA", + "ftplib", + "FTPSPN", + "GETDATE", + "gitea", + "globaldocudms", + "glyphicons", + "groupable", + "Guids", + "halflings", + "Hexsize", + "highcontrast", + "Hmac", + "holdsteps", + "hostspecific", + "icenium", + "IECN", + "imagebrowser", + "IMRB", + "Infineon", + "Insertd", + "inverseicons", + "IPCRB", + "ISADMIN", + "islast", + "ISNULL", + "ITAR", + "jquery", + "jqueryval", + "jqwidgets", + "jqxbuttongroup", + "jqxbuttons", + "jqxcalendar", + "jqxchart", + "jqxcheckbox", + "jqxcolorpicker", + "jqxcombobox", + "jqxcore", + "jqxdata", + "jqxdatatable", + "jqxdatetimeinput", + "jqxdocking", + "jqxdockpanel", + "jqxdragdrop", + "jqxdropdownbutton", + "jqxdropdownlist", + "jqxexpander", + "jqxgauge", + "jqxgrid", + "jqxinput", + "jqxknockout", + "jqxlistbox", + "jqxlistmenu", + "jqxmaskedinput", + "jqxmenu", + "jqxnavigationbar", + "jqxnumberinput", + "jqxpanel", + "jqxpasswordinput", + "jqxprogressbar", + "jqxradiobutton", + "jqxrangeselector", + "jqxrating", + "jqxresponse", + "jqxscrollbar", + "jqxscrollview", + "jqxslider", + "jqxsplitter", + "jqxswitchbutton", + "jqxtabs", + "jqxtooltip", + "jqxtouch", + "jqxtree", + "jqxtreegrid", + "jqxtreemap", + "jqxvalidator", + "jqxwindow", + "kendogridcustom", + "kendoui", + "labelelement", + "labelledby", + "Leanred", + "lightgray", + "linkbutton", + "Linq", + "Listdiv", + "listview", + "Lnks", + "localfilename", + "loclist", + "logis", + "logtext", + "loopmis", + "lotdispo", + "LOTDISPSITION", + "Lotfile", + "lotlist", + "lotstatusoption", + "LTRIM", + "MADUREIRA", + "mailrelay", + "MDTM", + "meego", + "meetingid", + "menubutton", + "mesafi", + "metroblack", + "metrodark", + "miliseconds", + "modalview", + "modernizr", + "Modernizr", + "monthview", + "MRBIs", + "Mrbs", + "msecs", + "multipleextended", + "Navigatable", + "nbsp", + "newbase", + "newchange", + "newdi", + "newfilename", + "newsource", + "Newtonsoft", + "Nontransferrable", + "notications", + "Notifcation", + "Notifyf", + "NTLM", + "Nullcc", + "numerictextbox", + "objdata", + "OCAP", + "occured", + "odata", + "oldfilename", + "OLHOLD", + "onclick", + "onmousemove", + "OPDESC", + "OPENQUERY", + "Oper", + "operationslist", + "Orginator", + "Originatorname", + "Ouellette", + "Owin", + "pageable", + "Pageable", + "panelbar", + "parentid", + "parminput", + "parms", + "Parms", + "particula", + "pasv", + "PASV", + "PATINDEX", + "PCRB", + "PCRBID", + "pcrvalues", + "pdbonly", + "Preventitive", + "preventivet", + "Prevetative", + "proces", + "Processedl", + "procs", + "productfamilies", + "progess", + "progressbar", + "qrcode", + "Quanityt", + "rangebar", + "Recep", + "Recepient", + "recieved", + "recordlock", + "remotefilename", + "reorderable", + "reportform", + "reportslist", + "reportslistdiv", + "Reqquired", + "Reqs", + "Requiest", + "Responsibles", + "RETR", + "Revisioing", + "Revisioned", + "Revison", + "rgba", + "rkotian", + "RNFR", + "RNTO", + "Roless", + "roundbg", + "RTRIM", + "SAMDB", + "scroller", + "scrollview", + "seleced", + "selectionlog", + "Selectpart", + "sess", + "Sfisharepoint", + "shinyblack", + "showpassword", + "SIGNON", + "simpleparser", + "slddrw", + "sldprt", + "sortasc", + "sortascbutton", + "sortdesc", + "sortdescbutton", + "sortremove", + "sparkline", + "splitview", + "SPNMRB", + "SPNPDB", + "SSRS", + "Sssign", + "Staus", + "stylesheet", + "Submited", + "subrole", + "subroles", + "Succefully", + "Succesfully", + "sucessfully", + "SURP", + "Swashbuckle", + "SWRN", + "tabindex", + "tabstrip", + "Tahoma", + "taskcompleted", + "Tasklist", + "Taveler", + "TECN", + "TECNs", + "TEMIRWAP", + "tempecd", + "tempimplement", + "templabel", + "tempvalue", + "TEMSA", + "Tencor", + "timepicker", + "Tobe", + "Toplevel", + "Totrav", + "trainingby", + "Traininglist", + "traininglistdiv", + "transanction", + "Trav", + "Traveller", + "Traverler", + "TRAVLELER", + "Travler", + "TREEVIEW", + "trigerred", + "ttinclude", + "Uhandled", + "Updat", + "Uplaod", + "Upto", + "userevents", + "userids", + "userlist", + "Validatable", + "valueelement", + "Variabls", + "Verdana", + "vgrid", + "viewmodel", + "vsdoc", + "whethere", + "windowsphone", + "Winsock", + "worlflow" + ] +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/.vscode/tasks.json b/MesaFabApproval.Shared/.vscode/tasks.json new file mode 100644 index 0000000..3a383f2 --- /dev/null +++ b/MesaFabApproval.Shared/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Format", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "--report", + ".vscode", + "--verbosity", + "detailed", + "--severity", + "warn" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "Format-Whitespaces", + "command": "dotnet", + "type": "process", + "args": [ + "format", + "whitespace" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/MesaFabApproval.Shared.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/Approval.cs b/MesaFabApproval.Shared/Models/Approval.cs index 844121b..0ebc88b 100644 --- a/MesaFabApproval.Shared/Models/Approval.cs +++ b/MesaFabApproval.Shared/Models/Approval.cs @@ -13,10 +13,10 @@ public class Approval { public int ItemStatus { get; set; } = 0; public string StatusMessage = "Assigned"; public DateTime NotifyDate { get; set; } = DateTimeUtilities.MIN_DT; - public required DateTime AssignedDate { get; set; } + public required DateTime AssignedDate { get; set; } public DateTime CompletedDate { get; set; } = DateTimeUtilities.MAX_DT; public string Comments { get; set; } = ""; public int Step { get; set; } = 1; public string SubRoleCategoryItem { get; set; } = ""; public int TaskID { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/AuthAttempt.cs b/MesaFabApproval.Shared/Models/AuthAttempt.cs index 5e58a08..0e3fd49 100644 --- a/MesaFabApproval.Shared/Models/AuthAttempt.cs +++ b/MesaFabApproval.Shared/Models/AuthAttempt.cs @@ -4,4 +4,4 @@ public class AuthAttempt { public required string LoginID { get; set; } public string Password { get; set; } = ""; public AuthTokens? AuthTokens { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/AuthTokens.cs b/MesaFabApproval.Shared/Models/AuthTokens.cs index d0118d8..82040b5 100644 --- a/MesaFabApproval.Shared/Models/AuthTokens.cs +++ b/MesaFabApproval.Shared/Models/AuthTokens.cs @@ -3,4 +3,4 @@ public class AuthTokens { public required string JwtToken { get; set; } public required string RefreshToken { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/LoginResult.cs b/MesaFabApproval.Shared/Models/LoginResult.cs index 7c41ad2..d72f47d 100644 --- a/MesaFabApproval.Shared/Models/LoginResult.cs +++ b/MesaFabApproval.Shared/Models/LoginResult.cs @@ -4,4 +4,4 @@ public class LoginResult { public required bool IsAuthenticated { get; set; } public required User User { get; set; } public required AuthTokens AuthTokens { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MRB.cs b/MesaFabApproval.Shared/Models/MRB.cs index 1f68082..8c28792 100644 --- a/MesaFabApproval.Shared/Models/MRB.cs +++ b/MesaFabApproval.Shared/Models/MRB.cs @@ -3,13 +3,13 @@ namespace MesaFabApproval.Shared.Models; public class MRB { - public static string[] Stages { get; } = { + public static string[] Stages { get; } = [ "Draft", "QA Pre Approval", "Pending Approval", "Approved", "Complete" - }; + ]; public int MRBNumber { get; set; } public int OriginatorID { get; set; } @@ -43,4 +43,4 @@ public class MRB { public required string RoleName { get; set; } public required string SubRoleName { get; set; } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MRBAction.cs b/MesaFabApproval.Shared/Models/MRBAction.cs index 21814b6..460beff 100644 --- a/MesaFabApproval.Shared/Models/MRBAction.cs +++ b/MesaFabApproval.Shared/Models/MRBAction.cs @@ -4,8 +4,8 @@ namespace MesaFabApproval.Shared.Models; public class MRBAction { public int ActionID { get; set; } - public required string Action { get; set; } - public required string Customer { get; set; } + public required string Action { get; set; } + public required string Customer { get; set; } public required int Quantity { get; set; } public required string PartNumber { get; set; } public required string LotNumber { get; set; } @@ -17,4 +17,4 @@ public class MRBAction { public string ConvertFrom { get; set; } = ""; public string ConvertTo { get; set; } = ""; public string Justification { get; set; } = ""; -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MRBActionAttachment.cs b/MesaFabApproval.Shared/Models/MRBActionAttachment.cs index 7c5fc54..60f2249 100644 --- a/MesaFabApproval.Shared/Models/MRBActionAttachment.cs +++ b/MesaFabApproval.Shared/Models/MRBActionAttachment.cs @@ -6,4 +6,4 @@ public class MRBActionAttachment { public required string FileName { get; set; } public required DateTime UploadDate { get; set; } public required string Path { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MRBAttachment.cs b/MesaFabApproval.Shared/Models/MRBAttachment.cs index c886436..34f0e2d 100644 --- a/MesaFabApproval.Shared/Models/MRBAttachment.cs +++ b/MesaFabApproval.Shared/Models/MRBAttachment.cs @@ -10,4 +10,4 @@ public class MRBAttachment { public required DateTime UploadDate { get; set; } public string? Path { get; set; } public IBrowserFile? File { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MRBNotification.cs b/MesaFabApproval.Shared/Models/MRBNotification.cs index 88d7ff7..6cfe396 100644 --- a/MesaFabApproval.Shared/Models/MRBNotification.cs +++ b/MesaFabApproval.Shared/Models/MRBNotification.cs @@ -3,4 +3,4 @@ public class MRBNotification { public required string Message { get; set; } public required MRB MRB { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/MonInMetricRequest.cs b/MesaFabApproval.Shared/Models/MonInMetricRequest.cs index 9a9c9d4..fe2ee00 100644 --- a/MesaFabApproval.Shared/Models/MonInMetricRequest.cs +++ b/MesaFabApproval.Shared/Models/MonInMetricRequest.cs @@ -5,4 +5,4 @@ public class MonInMetricRequest { public required DateTime dateTime { get; set; } public required string metricName { get; set; } public required double metricValue { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCR3Document.cs b/MesaFabApproval.Shared/Models/PCR3Document.cs index bd6dd85..cdd228d 100644 --- a/MesaFabApproval.Shared/Models/PCR3Document.cs +++ b/MesaFabApproval.Shared/Models/PCR3Document.cs @@ -17,4 +17,4 @@ public class PCR3Document { if (this.ECNNumber > 0) return this.ECNNumber.ToString(); return string.Empty; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRB.cs b/MesaFabApproval.Shared/Models/PCRB.cs index da73f48..7640fe5 100644 --- a/MesaFabApproval.Shared/Models/PCRB.cs +++ b/MesaFabApproval.Shared/Models/PCRB.cs @@ -3,13 +3,13 @@ namespace MesaFabApproval.Shared.Models; public class PCRB { - public static string[] Stages { get; } = { + public static string[] Stages { get; } = [ "Draft", "PCR1", "PCR2", "PCR3", "Complete" - }; + ]; public int PlanNumber { get; set; } public int OwnerID { get; set; } @@ -21,6 +21,6 @@ public class PCRB { public string ReasonForChange { get; set; } = ""; public string ChangeDescription { get; set; } = ""; public DateTime InsertTimeStamp { get; set; } = DateTimeUtilities.MIN_DT; - public DateTime LastUpdateDate { get; set; } = DateTimeUtilities.MIN_DT; - public DateTime ClosedDate { get; set; } = DateTimeUtilities.MAX_DT; -} + public DateTime LastUpdateDate { get; set; } = DateTimeUtilities.MIN_DT; + public DateTime ClosedDate { get; set; } = DateTimeUtilities.MAX_DT; +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRBActionItem.cs b/MesaFabApproval.Shared/Models/PCRBActionItem.cs index 146f7c2..b8c847a 100644 --- a/MesaFabApproval.Shared/Models/PCRBActionItem.cs +++ b/MesaFabApproval.Shared/Models/PCRBActionItem.cs @@ -18,4 +18,4 @@ public class PCRBActionItem { public required int PlanNumber { get; set; } public required int Step { get; set; } public DateTime NotifyDate { get; set; } = DateTimeUtilities.MIN_DT; -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRBActionItemNotification.cs b/MesaFabApproval.Shared/Models/PCRBActionItemNotification.cs index 4b3daa3..a0fb355 100644 --- a/MesaFabApproval.Shared/Models/PCRBActionItemNotification.cs +++ b/MesaFabApproval.Shared/Models/PCRBActionItemNotification.cs @@ -4,4 +4,4 @@ public class PCRBActionItemNotification { public required PCRB PCRB { get; set; } public required PCRBActionItem ActionItem { get; set; } public required string Message { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRBAttachment.cs b/MesaFabApproval.Shared/Models/PCRBAttachment.cs index f85a95e..2f5f79f 100644 --- a/MesaFabApproval.Shared/Models/PCRBAttachment.cs +++ b/MesaFabApproval.Shared/Models/PCRBAttachment.cs @@ -13,4 +13,4 @@ public class PCRBAttachment { public string? Path { get; set; } public IBrowserFile? File { get; set; } public required int Step { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRBAttendee.cs b/MesaFabApproval.Shared/Models/PCRBAttendee.cs index 8c54ecf..b2c0691 100644 --- a/MesaFabApproval.Shared/Models/PCRBAttendee.cs +++ b/MesaFabApproval.Shared/Models/PCRBAttendee.cs @@ -9,4 +9,4 @@ public class PCRBAttendee { public required int AttendeeID { get; set; } public User? Attendee { get; set; } public required int Step { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/PCRBNotification.cs b/MesaFabApproval.Shared/Models/PCRBNotification.cs index c993511..72795cc 100644 --- a/MesaFabApproval.Shared/Models/PCRBNotification.cs +++ b/MesaFabApproval.Shared/Models/PCRBNotification.cs @@ -3,4 +3,4 @@ public class PCRBNotification { public required string Message { get; set; } public required PCRB PCRB { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/RawMonInStatusRequest.cs b/MesaFabApproval.Shared/Models/RawMonInStatusRequest.cs index fc4a2ed..776e76a 100644 --- a/MesaFabApproval.Shared/Models/RawMonInStatusRequest.cs +++ b/MesaFabApproval.Shared/Models/RawMonInStatusRequest.cs @@ -5,4 +5,4 @@ public class RawMonInStatusRequest { public required DateTime dateTime { get; set; } public required string statusName { get; set; } public required string statusValue { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/Role.cs b/MesaFabApproval.Shared/Models/Role.cs index 1d0b0c6..3e3bd81 100644 --- a/MesaFabApproval.Shared/Models/Role.cs +++ b/MesaFabApproval.Shared/Models/Role.cs @@ -1,11 +1,11 @@ namespace MesaFabApproval.Shared.Models; public class Role { - private string Value { get; set; } + private string Value { get; set; } private Role(string value) { this.Value = value; } public static Role MRB_APPROVER { get { return new Role("MRB Approver"); } } public override string ToString() => Value; -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/StatusValue.cs b/MesaFabApproval.Shared/Models/StatusValue.cs index 7001be2..cf0c5a0 100644 --- a/MesaFabApproval.Shared/Models/StatusValue.cs +++ b/MesaFabApproval.Shared/Models/StatusValue.cs @@ -7,4 +7,4 @@ public enum StatusValue { Critical, Down, Unknown -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/SubRole.cs b/MesaFabApproval.Shared/Models/SubRole.cs index 5ddcc68..90d2ba3 100644 --- a/MesaFabApproval.Shared/Models/SubRole.cs +++ b/MesaFabApproval.Shared/Models/SubRole.cs @@ -5,4 +5,4 @@ public class SubRole { public required string SubRoleName { get; set; } public required int SubRoleCategoryID { get; set; } public required string SubRoleCategoryItem { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/Tool.cs b/MesaFabApproval.Shared/Models/Tool.cs index e65775a..11e6a11 100644 --- a/MesaFabApproval.Shared/Models/Tool.cs +++ b/MesaFabApproval.Shared/Models/Tool.cs @@ -108,4 +108,4 @@ public class Tool { new Tool { Name = "8\" Wafer Counter 2" }, new Tool { Name = "8\" Wafer Counter 3" } }; -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/UploadResult.cs b/MesaFabApproval.Shared/Models/UploadResult.cs index 3c72935..7db5251 100644 --- a/MesaFabApproval.Shared/Models/UploadResult.cs +++ b/MesaFabApproval.Shared/Models/UploadResult.cs @@ -4,4 +4,4 @@ public class UploadResult { public required bool UploadSuccessful { get; set; } public string? FileName { get; set; } public string? Error { get; set; } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Models/User.cs b/MesaFabApproval.Shared/Models/User.cs index 1f4b84a..9c0486e 100644 --- a/MesaFabApproval.Shared/Models/User.cs +++ b/MesaFabApproval.Shared/Models/User.cs @@ -14,17 +14,15 @@ public class User { public DateTime OOOExpirationDate { get; set; } public int DelegatedTo { get; set; } - public string GetFullName() { - return $"{FirstName} {LastName}"; - } + public string GetFullName() => + $"{FirstName} {LastName}"; - public override bool Equals(object obj) { + public override bool Equals(object? obj) { User? u = obj as User; - return u is not null && u.UserID == this.UserID; + return u is not null && u.UserID == UserID; } - public override int GetHashCode() { - return this.UserID.GetHashCode(); - } -} + public override int GetHashCode() => + UserID.GetHashCode(); +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Services/MonInWorkerClient.cs b/MesaFabApproval.Shared/Services/MonInWorkerClient.cs index 3e7a935..7409d2a 100644 --- a/MesaFabApproval.Shared/Services/MonInWorkerClient.cs +++ b/MesaFabApproval.Shared/Services/MonInWorkerClient.cs @@ -175,4 +175,4 @@ public class MonInWorkerClient : IMonInWorkerClient { _logger.LogError(errMsgBuilder.ToString()); } } -} +} \ No newline at end of file diff --git a/MesaFabApproval.Shared/Utilities/DateTimeUtilities.cs b/MesaFabApproval.Shared/Utilities/DateTimeUtilities.cs index dda2e05..a803656 100644 --- a/MesaFabApproval.Shared/Utilities/DateTimeUtilities.cs +++ b/MesaFabApproval.Shared/Utilities/DateTimeUtilities.cs @@ -21,4 +21,4 @@ public class DateTimeUtilities { DateTime copy = dt ?? MAX_DT; return copy < MAX_DT ? copy.ToString("yyyy-MM-dd HH:mm") : ""; } -} +} \ No newline at end of file