Merge pull request 'fix/documentation_linter_bugs' (#141) from fix/documentation_linter_bugs into dev
Reviewed-on: https://10.4.0.131/gitea/DI1-P4-E1/Webzine/pulls/141 Reviewed-by: Loic Masi <loic.masi@diiage.org>
This commit is contained in:
403
.editorconfig
Normal file
403
.editorconfig
Normal file
@@ -0,0 +1,403 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
# All files
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
|
||||||
|
# Xml files
|
||||||
|
[*.xml]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
# Xml project files
|
||||||
|
[*.{csproj,fsproj,vbproj,proj,slnx}]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
# Xml config files
|
||||||
|
[*.{props,targets,config,nuspec}]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
# C# files
|
||||||
|
[*.cs]
|
||||||
|
|
||||||
|
#### Core EditorConfig Options ####
|
||||||
|
|
||||||
|
# Indentation and spacing
|
||||||
|
indent_size = 4
|
||||||
|
tab_width = 4
|
||||||
|
|
||||||
|
# New line preferences
|
||||||
|
insert_final_newline = false
|
||||||
|
|
||||||
|
#### .NET Coding Conventions ####
|
||||||
|
[*.{cs,vb}]
|
||||||
|
|
||||||
|
# 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 = false:silent
|
||||||
|
dotnet_style_qualification_for_field = false:silent
|
||||||
|
dotnet_style_qualification_for_method = false:silent
|
||||||
|
dotnet_style_qualification_for_property = false:silent
|
||||||
|
|
||||||
|
# Language keywords vs BCL types preferences
|
||||||
|
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
|
||||||
|
dotnet_style_predefined_type_for_member_access = true:silent
|
||||||
|
|
||||||
|
# Parentheses preferences
|
||||||
|
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
|
||||||
|
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
|
||||||
|
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
|
||||||
|
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
|
||||||
|
|
||||||
|
# Modifier preferences
|
||||||
|
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
|
||||||
|
|
||||||
|
# Expression-level preferences
|
||||||
|
dotnet_style_coalesce_expression = true:suggestion
|
||||||
|
dotnet_style_collection_initializer = true:suggestion
|
||||||
|
dotnet_style_explicit_tuple_names = true:suggestion
|
||||||
|
dotnet_style_namespace_match_folder = true:suggestion
|
||||||
|
dotnet_style_null_propagation = true:suggestion
|
||||||
|
dotnet_style_object_initializer = true:suggestion
|
||||||
|
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||||
|
dotnet_style_prefer_auto_properties = true:suggestion
|
||||||
|
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
|
||||||
|
dotnet_style_prefer_compound_assignment = true:suggestion
|
||||||
|
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:suggestion
|
||||||
|
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
|
||||||
|
dotnet_style_prefer_inferred_tuple_names = true:suggestion
|
||||||
|
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
|
||||||
|
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
|
||||||
|
dotnet_style_prefer_simplified_interpolation = true:suggestion
|
||||||
|
|
||||||
|
# Field preferences
|
||||||
|
dotnet_style_readonly_field = true:warning
|
||||||
|
|
||||||
|
# Parameter preferences
|
||||||
|
dotnet_code_quality_unused_parameters = all:suggestion
|
||||||
|
|
||||||
|
# Suppression preferences
|
||||||
|
dotnet_remove_unnecessary_suppression_exclusions = none
|
||||||
|
|
||||||
|
#### C# Coding Conventions ####
|
||||||
|
[*.cs]
|
||||||
|
|
||||||
|
# var preferences
|
||||||
|
csharp_style_var_elsewhere = false:silent
|
||||||
|
csharp_style_var_for_built_in_types = false:silent
|
||||||
|
csharp_style_var_when_type_is_apparent = false:silent
|
||||||
|
|
||||||
|
# Expression-bodied members
|
||||||
|
csharp_style_expression_bodied_accessors = true:silent
|
||||||
|
csharp_style_expression_bodied_constructors = false:silent
|
||||||
|
csharp_style_expression_bodied_indexers = true:silent
|
||||||
|
csharp_style_expression_bodied_lambdas = true:suggestion
|
||||||
|
csharp_style_expression_bodied_local_functions = false:silent
|
||||||
|
csharp_style_expression_bodied_methods = false:silent
|
||||||
|
csharp_style_expression_bodied_operators = false:silent
|
||||||
|
csharp_style_expression_bodied_properties = true:silent
|
||||||
|
|
||||||
|
# Pattern matching preferences
|
||||||
|
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
||||||
|
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
||||||
|
csharp_style_prefer_extended_property_pattern = true:suggestion
|
||||||
|
csharp_style_prefer_not_pattern = true:suggestion
|
||||||
|
csharp_style_prefer_pattern_matching = true:silent
|
||||||
|
csharp_style_prefer_switch_expression = true:suggestion
|
||||||
|
|
||||||
|
# Null-checking preferences
|
||||||
|
csharp_style_conditional_delegate_call = true:suggestion
|
||||||
|
|
||||||
|
# Modifier preferences
|
||||||
|
csharp_prefer_static_anonymous_function = true:suggestion
|
||||||
|
csharp_prefer_static_local_function = true:warning
|
||||||
|
csharp_preferred_modifier_order = public,private,protected,internal,file,const,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion
|
||||||
|
csharp_style_prefer_readonly_struct = true:suggestion
|
||||||
|
csharp_style_prefer_readonly_struct_member = true:suggestion
|
||||||
|
|
||||||
|
# Code-block preferences
|
||||||
|
csharp_prefer_braces = true:silent
|
||||||
|
csharp_prefer_simple_using_statement = true:suggestion
|
||||||
|
csharp_style_namespace_declarations = file_scoped:suggestion
|
||||||
|
csharp_style_prefer_method_group_conversion = true:silent
|
||||||
|
csharp_style_prefer_primary_constructors = true:suggestion
|
||||||
|
csharp_style_prefer_top_level_statements = true:silent
|
||||||
|
|
||||||
|
# Expression-level preferences
|
||||||
|
csharp_prefer_simple_default_expression = true:suggestion
|
||||||
|
csharp_style_deconstructed_variable_declaration = true:suggestion
|
||||||
|
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
|
||||||
|
csharp_style_inlined_variable_declaration = true:suggestion
|
||||||
|
csharp_style_prefer_index_operator = true:suggestion
|
||||||
|
csharp_style_prefer_local_over_anonymous_function = true:suggestion
|
||||||
|
csharp_style_prefer_null_check_over_type_check = true:suggestion
|
||||||
|
csharp_style_prefer_range_operator = true:suggestion
|
||||||
|
csharp_style_prefer_tuple_swap = true:suggestion
|
||||||
|
csharp_style_prefer_utf8_string_literals = true:suggestion
|
||||||
|
csharp_style_throw_expression = true:suggestion
|
||||||
|
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
||||||
|
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
|
||||||
|
|
||||||
|
# 'using' directive preferences
|
||||||
|
csharp_using_directive_placement = outside_namespace:silent
|
||||||
|
|
||||||
|
#### C# Formatting Rules ####
|
||||||
|
|
||||||
|
# New line preferences
|
||||||
|
csharp_new_line_before_catch = true
|
||||||
|
csharp_new_line_before_else = true
|
||||||
|
csharp_new_line_before_finally = true
|
||||||
|
csharp_new_line_before_members_in_anonymous_types = true
|
||||||
|
csharp_new_line_before_members_in_object_initializers = true
|
||||||
|
csharp_new_line_before_open_brace = all
|
||||||
|
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 ####
|
||||||
|
[*.{cs,vb}]
|
||||||
|
|
||||||
|
# Naming rules
|
||||||
|
|
||||||
|
dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.symbols = types_and_namespaces
|
||||||
|
dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.interfaces_should_be_ipascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.interfaces_should_be_ipascalcase.symbols = interfaces
|
||||||
|
dotnet_naming_rule.interfaces_should_be_ipascalcase.style = ipascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.type_parameters_should_be_tpascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.type_parameters_should_be_tpascalcase.symbols = type_parameters
|
||||||
|
dotnet_naming_rule.type_parameters_should_be_tpascalcase.style = tpascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.methods_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.methods_should_be_pascalcase.symbols = methods
|
||||||
|
dotnet_naming_rule.methods_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.properties_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.properties_should_be_pascalcase.symbols = properties
|
||||||
|
dotnet_naming_rule.properties_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.events_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.events_should_be_pascalcase.symbols = events
|
||||||
|
dotnet_naming_rule.events_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.local_variables_should_be_camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.local_variables_should_be_camelcase.symbols = local_variables
|
||||||
|
dotnet_naming_rule.local_variables_should_be_camelcase.style = camelcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.local_constants_should_be_camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.local_constants_should_be_camelcase.symbols = local_constants
|
||||||
|
dotnet_naming_rule.local_constants_should_be_camelcase.style = camelcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.parameters_should_be_camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.parameters_should_be_camelcase.symbols = parameters
|
||||||
|
dotnet_naming_rule.parameters_should_be_camelcase.style = camelcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.public_fields_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.public_fields_should_be_pascalcase.symbols = public_fields
|
||||||
|
dotnet_naming_rule.public_fields_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.private_fields_should_be__camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_fields_should_be__camelcase.symbols = private_fields
|
||||||
|
dotnet_naming_rule.private_fields_should_be__camelcase.style = _camelcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.private_static_fields_should_be_s_camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_static_fields_should_be_s_camelcase.symbols = private_static_fields
|
||||||
|
dotnet_naming_rule.private_static_fields_should_be_s_camelcase.style = s_camelcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.public_constant_fields_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.public_constant_fields_should_be_pascalcase.symbols = public_constant_fields
|
||||||
|
dotnet_naming_rule.public_constant_fields_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.private_constant_fields_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_constant_fields_should_be_pascalcase.symbols = private_constant_fields
|
||||||
|
dotnet_naming_rule.private_constant_fields_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.symbols = public_static_readonly_fields
|
||||||
|
dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.symbols = private_static_readonly_fields
|
||||||
|
dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.enums_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.enums_should_be_pascalcase.symbols = enums
|
||||||
|
dotnet_naming_rule.enums_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.local_functions_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.local_functions_should_be_pascalcase.symbols = local_functions
|
||||||
|
dotnet_naming_rule.local_functions_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascalcase.symbols = non_field_members
|
||||||
|
dotnet_naming_rule.non_field_members_should_be_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
# Symbol specifications
|
||||||
|
|
||||||
|
dotnet_naming_symbols.interfaces.applicable_kinds = interface
|
||||||
|
dotnet_naming_symbols.interfaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.interfaces.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.enums.applicable_kinds = enum
|
||||||
|
dotnet_naming_symbols.enums.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.enums.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.events.applicable_kinds = event
|
||||||
|
dotnet_naming_symbols.events.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.events.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.methods.applicable_kinds = method
|
||||||
|
dotnet_naming_symbols.methods.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.methods.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.properties.applicable_kinds = property
|
||||||
|
dotnet_naming_symbols.properties.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.properties.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.public_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.public_fields.applicable_accessibilities = public, internal
|
||||||
|
dotnet_naming_symbols.public_fields.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.private_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.private_fields.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.private_static_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.private_static_fields.required_modifiers = static
|
||||||
|
|
||||||
|
dotnet_naming_symbols.types_and_namespaces.applicable_kinds = namespace, class, struct, interface, enum
|
||||||
|
dotnet_naming_symbols.types_and_namespaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.types_and_namespaces.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 =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.type_parameters.applicable_kinds = namespace
|
||||||
|
dotnet_naming_symbols.type_parameters.applicable_accessibilities = *
|
||||||
|
dotnet_naming_symbols.type_parameters.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.private_constant_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.private_constant_fields.required_modifiers = const
|
||||||
|
|
||||||
|
dotnet_naming_symbols.local_variables.applicable_kinds = local
|
||||||
|
dotnet_naming_symbols.local_variables.applicable_accessibilities = local
|
||||||
|
dotnet_naming_symbols.local_variables.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.local_constants.applicable_kinds = local
|
||||||
|
dotnet_naming_symbols.local_constants.applicable_accessibilities = local
|
||||||
|
dotnet_naming_symbols.local_constants.required_modifiers = const
|
||||||
|
|
||||||
|
dotnet_naming_symbols.parameters.applicable_kinds = parameter
|
||||||
|
dotnet_naming_symbols.parameters.applicable_accessibilities = *
|
||||||
|
dotnet_naming_symbols.parameters.required_modifiers =
|
||||||
|
|
||||||
|
dotnet_naming_symbols.public_constant_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.public_constant_fields.applicable_accessibilities = public, internal
|
||||||
|
dotnet_naming_symbols.public_constant_fields.required_modifiers = const
|
||||||
|
|
||||||
|
dotnet_naming_symbols.public_static_readonly_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.public_static_readonly_fields.applicable_accessibilities = public, internal
|
||||||
|
dotnet_naming_symbols.public_static_readonly_fields.required_modifiers = readonly, static
|
||||||
|
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
|
||||||
|
dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = readonly, static
|
||||||
|
|
||||||
|
dotnet_naming_symbols.local_functions.applicable_kinds = local_function
|
||||||
|
dotnet_naming_symbols.local_functions.applicable_accessibilities = *
|
||||||
|
dotnet_naming_symbols.local_functions.required_modifiers =
|
||||||
|
|
||||||
|
# Naming styles
|
||||||
|
|
||||||
|
dotnet_naming_style.pascalcase.required_prefix =
|
||||||
|
dotnet_naming_style.pascalcase.required_suffix =
|
||||||
|
dotnet_naming_style.pascalcase.word_separator =
|
||||||
|
dotnet_naming_style.pascalcase.capitalization = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_style.ipascalcase.required_prefix = I
|
||||||
|
dotnet_naming_style.ipascalcase.required_suffix =
|
||||||
|
dotnet_naming_style.ipascalcase.word_separator =
|
||||||
|
dotnet_naming_style.ipascalcase.capitalization = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_style.tpascalcase.required_prefix = T
|
||||||
|
dotnet_naming_style.tpascalcase.required_suffix =
|
||||||
|
dotnet_naming_style.tpascalcase.word_separator =
|
||||||
|
dotnet_naming_style.tpascalcase.capitalization = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_style._camelcase.required_prefix = _
|
||||||
|
dotnet_naming_style._camelcase.required_suffix =
|
||||||
|
dotnet_naming_style._camelcase.word_separator =
|
||||||
|
dotnet_naming_style._camelcase.capitalization = camel_case
|
||||||
|
|
||||||
|
dotnet_naming_style.camelcase.required_prefix =
|
||||||
|
dotnet_naming_style.camelcase.required_suffix =
|
||||||
|
dotnet_naming_style.camelcase.word_separator =
|
||||||
|
dotnet_naming_style.camelcase.capitalization = camel_case
|
||||||
|
|
||||||
|
dotnet_naming_style.s_camelcase.required_prefix = s_
|
||||||
|
dotnet_naming_style.s_camelcase.required_suffix =
|
||||||
|
dotnet_naming_style.s_camelcase.word_separator =
|
||||||
|
dotnet_naming_style.s_camelcase.capitalization = camel_case
|
||||||
|
|
||||||
|
dotnet_diagnostic.SA1623.severity = none
|
||||||
|
dotnet_diagnostic.SA1624.severity = none
|
||||||
|
|
||||||
|
dotnet_diagnostic.SA1600.severity = suggestion
|
||||||
|
|
||||||
|
[*.cs]
|
||||||
|
# 1. Tell the .NET Formatter to stop injecting a header
|
||||||
|
file_header_template = unset
|
||||||
|
|
||||||
|
# 2. Tell StyleCop to stop requiring a file header (SA1633)
|
||||||
|
dotnet_diagnostic.SA1633.severity = none
|
||||||
|
|
||||||
|
# 3. Tell the IDE to stop requiring a file header (IDE0073)
|
||||||
|
dotnet_diagnostic.IDE0073.severity = none
|
||||||
@@ -2,8 +2,14 @@
|
|||||||
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
|
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
|
||||||
"settings": {
|
"settings": {
|
||||||
"documentationRules": {
|
"documentationRules": {
|
||||||
"companyName": " Equipe 1 - ",
|
"documentInterfaces": false,
|
||||||
"documentationCulture": "fr-FR"
|
"documentInternalElements": false,
|
||||||
}
|
"documentExposedElements": false
|
||||||
|
},
|
||||||
|
"maintainabilityRules": {
|
||||||
|
"settings": {
|
||||||
|
"commonWords": [ "Obtient", "définit" ]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Définit le contexte de la base de données.
|
||||||
|
/// </summary>
|
||||||
namespace Webzine.EntitiesContext
|
namespace Webzine.EntitiesContext
|
||||||
{
|
{
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
|
|
||||||
public class WebzineDbContext : DbContext
|
public class WebzineDbContext : DbContext
|
||||||
@@ -14,25 +18,27 @@ namespace Webzine.EntitiesContext
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="options">Options.</param>
|
/// <param name="options">Options.</param>
|
||||||
public WebzineDbContext(DbContextOptions<WebzineDbContext> options)
|
public WebzineDbContext(DbContextOptions<WebzineDbContext> options)
|
||||||
: base(options) { }
|
: base(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets Obtient les artistes de la base.
|
/// Obtient ou définit les artistes de la base.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DbSet<Artiste> Artistes => this.Set<Artiste>();
|
public DbSet<Artiste> Artistes => this.Set<Artiste>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets Obtient les styles de la base.
|
/// Obtient ou définit les styles de la base.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DbSet<Style> Styles => this.Set<Style>();
|
public DbSet<Style> Styles => this.Set<Style>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets obtient les titres de la base.
|
/// Obtient ou définit les titres de la base.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DbSet<Titre> Titres => this.Set<Titre>();
|
public DbSet<Titre> Titres => this.Set<Titre>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets obtient les commentaires de la base.
|
/// Obtient ou définit les commentaires de la base.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DbSet<Commentaire> Commentaires => this.Set<Commentaire>();
|
public DbSet<Commentaire> Commentaires => this.Set<Commentaire>();
|
||||||
|
|
||||||
@@ -102,4 +108,4 @@ namespace Webzine.EntitiesContext
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,4 +106,4 @@ namespace Webzine.Entity.Tests
|
|||||||
Common.HasProperty(typeof(Commentaire), nameof(Commentaire.Titre));
|
Common.HasProperty(typeof(Commentaire), nameof(Commentaire.Titre));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ namespace Webzine.Entity.Tests
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -13,8 +14,8 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'entité possède bien la propriété passée en paramètre.
|
/// Vérifie que l'entité possède bien la propriété passée en paramètre.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
public static void HasProperty(Type typeObjet, string nomPropriete)
|
public static void HasProperty(Type typeObjet, string nomPropriete)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -24,9 +25,9 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue.
|
/// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
/// <param name="chaineAttendue">valeur attendue pour l'affichage de cette propriété</param>
|
/// <param name="chaineAttendue">valeur attendue pour l'affichage de cette propriété.</param>
|
||||||
public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue)
|
public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -38,9 +39,9 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
/// <param name="max">longueur maximum</param>
|
/// <param name="max">longueur maximum.</param>
|
||||||
public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max)
|
public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -52,9 +53,9 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
/// <param name="min">longueur minimum</param>
|
/// <param name="min">longueur minimum.</param>
|
||||||
public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min)
|
public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -66,8 +67,8 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'attribut de l'entité a l'annotation [Required].
|
/// Vérifie que l'attribut de l'entité a l'annotation [Required].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
public static void AttributRequis(Type typeObjet, string nomPropriete)
|
public static void AttributRequis(Type typeObjet, string nomPropriete)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -78,8 +79,8 @@ namespace Webzine.Entity.Tests
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url].
|
/// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="typeObjet">type de l'entité</param>
|
/// <param name="typeObjet">type de l'entité.</param>
|
||||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||||
public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete)
|
public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete)
|
||||||
{
|
{
|
||||||
var property = typeObjet.GetProperty(nomPropriete);
|
var property = typeObjet.GetProperty(nomPropriete);
|
||||||
@@ -87,4 +88,4 @@ namespace Webzine.Entity.Tests
|
|||||||
Assert.IsNull(annotation, "La propriété '" + nomPropriete + "' ne doit pas être une URL obligatoirement. Retirez l'annotation Url.");
|
Assert.IsNull(annotation, "La propriété '" + nomPropriete + "' ne doit pas être une URL obligatoirement. Retirez l'annotation Url.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,4 +238,4 @@ namespace Webzine.Entity.Tests
|
|||||||
Common.AttributHasNotUrlValidation(typeof(Titre), nameof(Titre.UrlJaquette));
|
Common.AttributHasNotUrlValidation(typeof(Titre), nameof(Titre.UrlJaquette));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace Webzine.Entity
|
||||||
|
|
||||||
namespace Webzine.Entity
|
|
||||||
{
|
{
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe représentant un artiste.
|
/// Classe représentant un artiste.
|
||||||
/// Lien avec l'entité <see cref="Titre"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
|
/// Lien avec l'entité <see cref="Titre"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
|
||||||
@@ -32,4 +32,4 @@ namespace Webzine.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Titre> Titres { get; set; }
|
public List<Titre> Titres { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace Webzine.Entity
|
||||||
|
|
||||||
namespace Webzine.Entity
|
|
||||||
{
|
{
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe représentant un commentaire laissé par un utilisateur sur un titre.
|
/// Classe représentant un commentaire laissé par un utilisateur sur un titre.
|
||||||
/// Lien avec l'entité <see cref="Titre"/> : un titre peut avoir plusieurs commentaires, mais un commentaire n'a qu'un seul titre.
|
/// Lien avec l'entité <see cref="Titre"/> : un titre peut avoir plusieurs commentaires, mais un commentaire n'a qu'un seul titre.
|
||||||
@@ -48,4 +48,4 @@ namespace Webzine.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Titre Titre { get; set; }
|
public Titre Titre { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
using Bogus;
|
|
||||||
|
|
||||||
namespace Webzine.Entity.Fixtures
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Factory pour générer des artistes avec des titres associés, à l'aide de la bibliothèque Bogus.
|
|
||||||
/// </summary>
|
|
||||||
public class ArtisteFactory
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Récupère un artiste par son nom, en générant des données fictives pour ses titres associés.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nom">Le nom de l'artiste à générer.</param>
|
|
||||||
/// <returns>Un objet Artiste avec des titres associés générés de manière aléatoire.</returns>
|
|
||||||
public static Artiste SeedArtisteByName(string nom)
|
|
||||||
{
|
|
||||||
// On définit nos albums "bouchonnés"
|
|
||||||
var albumsData = new[]
|
|
||||||
{
|
|
||||||
new { Nom = "Bohemian Rhapsody", Image = "https://upload.wikimedia.org/wikipedia/en/9/9f/Bohemian_Rhapsody.png" },
|
|
||||||
new { Nom = "Born This Way", Image = "https://static.wikia.nocookie.net/ladygaga/images/2/2d/BornThisWay-DeluxeEdition.jpg/revision/latest/scale-to-width-down/3500?cb=20111120030308" }
|
|
||||||
};
|
|
||||||
|
|
||||||
var faker = new Bogus.Faker("fr");
|
|
||||||
var tousLesTitres = new List<Titre>();
|
|
||||||
|
|
||||||
// Pour chaque album, on génère un paquet de titres
|
|
||||||
foreach (var album in albumsData)
|
|
||||||
{
|
|
||||||
var nombreDeTitres = faker.Random.Number(3, 6);
|
|
||||||
|
|
||||||
var titresDeLalbum = new Faker<Titre>("fr")
|
|
||||||
.RuleFor(t => t.IdTitre, f => f.IndexFaker + 1 + tousLesTitres.Count)
|
|
||||||
.RuleFor(t => t.UrlJaquette, _ => album.Image)
|
|
||||||
.RuleFor(t => t.Album, _ => album.Nom)
|
|
||||||
.RuleFor(t => t.Duree, f => f.Random.Number(90, 180))
|
|
||||||
.RuleFor(t => t.Libelle, f => f.Music.Genre() + " - " + f.Commerce.ProductName())
|
|
||||||
.Generate(nombreDeTitres);
|
|
||||||
|
|
||||||
tousLesTitres.AddRange(titresDeLalbum);
|
|
||||||
}
|
|
||||||
|
|
||||||
// On crée l'artiste final
|
|
||||||
var artisteFaker = new Faker<Artiste>("fr")
|
|
||||||
.RuleFor(a => a.IdArtiste, f => f.IndexFaker + 1)
|
|
||||||
.RuleFor(a => a.Nom, _ => nom)
|
|
||||||
.RuleFor(a => a.Biographie, f => f.Lorem.Paragraphs(2))
|
|
||||||
.RuleFor(a => a.Titres, _ => tousLesTitres);
|
|
||||||
|
|
||||||
return artisteFaker.Generate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// <copyright file="CommentaireFactory.cs" company="PlaceholderCompany">
|
|
||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
using Bogus;
|
|
||||||
|
|
||||||
namespace Webzine.Entity.Fixtures
|
|
||||||
{
|
|
||||||
public class CommentaireFactory
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
namespace Webzine.Entity.Fixtures;
|
|
||||||
|
|
||||||
using Entity;
|
|
||||||
using Faker;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
public class DataFactory
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Dictionnaire contenant des données de musique réelles pour les titres générés.
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string, (string TrackUrl, string ImageUrl)> RealMusicData { get; set; }
|
|
||||||
= new Dictionary<string, (string TrackUrl, string ImageUrl)>
|
|
||||||
{
|
|
||||||
{ "juliana_chahayed_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
|
|
||||||
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
|
|
||||||
|
|
||||||
{ "mister_v_1", ("https://youtu.be/JeqUw7sGUK8?si=FnmFR2EgkVY6MhqQ",
|
|
||||||
"https://img.youtube.com/vi/JeqUw7sGUK8/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "compagnie_creole_1", ("https://youtu.be/wfxt1SGWAI8",
|
|
||||||
"https://img.youtube.com/vi/wfxt1SGWAI8/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "femto_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
|
|
||||||
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
|
|
||||||
|
|
||||||
{ "chat_noir_1", ("https://youtu.be/OTi4-q-_Tj0?si=SNnLd-6Y893nL5Au",
|
|
||||||
"https://img.youtube.com/vi/OTi4-q-_Tj0/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_2", ("https://youtu.be/X-rJ01EyiAI?si=gH9m_U8oXI35OgWu",
|
|
||||||
"https://img.youtube.com/vi/X-rJ01EyiAI/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_3", ("https://youtu.be/7lIM0wSx7kQ?si=S-RAsLzd4SiCQhE4",
|
|
||||||
"https://img.youtube.com/vi/7lIM0wSx7kQ/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_4", ("https://youtu.be/dbxyKR1P8vA?si=aRzdYBhwvKptV8Ff",
|
|
||||||
"https://img.youtube.com/vi/dbxyKR1P8vA/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_5", ("https://youtu.be/DDHvKo5NnII?si=NFRkdVQL2mELP0yn",
|
|
||||||
"https://img.youtube.com/vi/DDHvKo5NnII/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_6", ("https://youtu.be/J9LgHNf2Qy0?si=YGO1ggiLkefa9901",
|
|
||||||
"https://img.youtube.com/vi/J9LgHNf2Qy0/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_7", ("https://youtu.be/oadhHk2xs6c?si=mbnJCA6SGsoYXnUK",
|
|
||||||
"https://img.youtube.com/vi/oadhHk2xs6c/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "chat_noir_8", ("https://youtu.be/6K1zCgkBaoE?si=quq9vQLJ-AmzjRJJ",
|
|
||||||
"https://img.youtube.com/vi/6K1zCgkBaoE/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "german_rapper_1", ("https://www.youtube.com/watch?v=DWpg71HJt24",
|
|
||||||
"https://img.youtube.com/vi/DWpg71HJt24/maxresdefault.jpg") },
|
|
||||||
|
|
||||||
{ "nizard_1", ("https://youtu.be/1fjA68k8DAU?si=2PuZSquVQGvfmQkZ",
|
|
||||||
"https://img.youtube.com/vi/1fjA68k8DAU/maxresdefault.jpg") },
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste d'artistes de musique en utilisant la bibliothèque Faker pour créer des noms d'artistes et des biographies réalistes.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Nombre d'artistes à générer</param>
|
|
||||||
/// <returns>Liste d'artistes de musique générés</returns>
|
|
||||||
public List<Artiste> GenerateArtists(int count)
|
|
||||||
{
|
|
||||||
var artists = new List<Artiste>();
|
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
artists.Add(new Artiste
|
|
||||||
{
|
|
||||||
IdArtiste = i + 1,
|
|
||||||
Nom = Name.FullName(),
|
|
||||||
Biographie = Lorem.Paragraph(),
|
|
||||||
Titres = new List<Titre>()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return artists;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste de styles de musique à partir d'une liste prédéfinie de noms de styles.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Nombre de styles à générer (maximum 15, car il y a 15 styles prédéfinis)</param>
|
|
||||||
/// <returns>Liste de styles de musique générés</returns>
|
|
||||||
public List<Style> GenerateStyles(int count)
|
|
||||||
{
|
|
||||||
var styleNames = new[] { "Rock", "Pop", "Rap", "Électro", "Jazz", "Classique", "Reggae", "Blues", "Metal", "Folk", "Chanson française", "Hip-Hop", "R&B", "Soul", "Punk" };
|
|
||||||
var styles = new List<Style>();
|
|
||||||
|
|
||||||
for (int i = 0; i < Math.Min(count, styleNames.Length); i++)
|
|
||||||
{
|
|
||||||
styles.Add(new Style
|
|
||||||
{
|
|
||||||
IdStyle = i + 1,
|
|
||||||
Libelle = styleNames[i],
|
|
||||||
Titres = new List<Titre>(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return styles;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste de titres de musique en utilisant des données de musique réelles pour les URL d'écoute et les jaquettes.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Nombre de titres à générer</param>
|
|
||||||
/// <param name="artists">Liste des artistes à associer aux titres générés</param>
|
|
||||||
/// <param name="styles">Liste des styles à associer aux titres générés</param>
|
|
||||||
/// <returns>Liste de titres de musique générés</returns>
|
|
||||||
public List<Titre> GenerateTitres(int count, List<Artiste> artists, List<Style> styles)
|
|
||||||
{
|
|
||||||
var titres = new List<Titre>();
|
|
||||||
var random = new Random();
|
|
||||||
var musicItems = RealMusicData.Values.ToList();
|
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
var randomMusic = musicItems[random.Next(musicItems.Count)];
|
|
||||||
var randomArtist = artists[random.Next(artists.Count)];
|
|
||||||
|
|
||||||
int numberOfStyles = random.Next(1, 4);
|
|
||||||
var selectedStyles = styles.OrderBy(x => random.Next()).Take(numberOfStyles).ToList();
|
|
||||||
|
|
||||||
var titre = new Titre
|
|
||||||
{
|
|
||||||
IdTitre = i + 1,
|
|
||||||
IdArtiste = randomArtist.IdArtiste,
|
|
||||||
Artiste = randomArtist,
|
|
||||||
Libelle = string.Join(" ", Lorem.Words(3)),
|
|
||||||
Chronique = Lorem.Paragraph(),
|
|
||||||
DateCreation = DateTime.Now.AddDays(-random.Next(1, 365)),
|
|
||||||
Duree = random.Next(120, 360), // 2 à 6 minutes en secondes
|
|
||||||
DateSortie = DateTime.Now.AddYears(-random.Next(0, 5)).AddDays(-random.Next(1, 365)),
|
|
||||||
UrlJaquette = randomMusic.ImageUrl,
|
|
||||||
UrlEcoute = randomMusic.TrackUrl,
|
|
||||||
NbLectures = random.Next(1000, 1000000),
|
|
||||||
NbLikes = random.Next(100, 100000), // Likes entre 100 et 100 000
|
|
||||||
Album = $"Album {random.Next(1, 10)}",
|
|
||||||
Commentaires = new List<Commentaire>(),
|
|
||||||
Styles = new List<Style>(),
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var style in selectedStyles)
|
|
||||||
{
|
|
||||||
titre.Styles.Add(style);
|
|
||||||
if (!style.Titres.Contains(titre))
|
|
||||||
{
|
|
||||||
style.Titres.Add(titre);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
titres.Add(titre);
|
|
||||||
randomArtist.Titres.Add(titres.Last());
|
|
||||||
}
|
|
||||||
|
|
||||||
return titres;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste de commentaires pour les titres de musique générés, en associant chaque commentaire à un titre aléatoire.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Nombre de commentaires à générer</param>
|
|
||||||
/// <param name="titres">Liste des titres de musique à associer aux commentaires générés</param>
|
|
||||||
/// <returns>Liste de commentaires générés</returns>
|
|
||||||
public List<Commentaire> GenerateCommentaires(int count, List<Titre> titres)
|
|
||||||
{
|
|
||||||
var commentaires = new List<Commentaire>();
|
|
||||||
var random = new Random();
|
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
var randomTitre = titres[random.Next(titres.Count)];
|
|
||||||
|
|
||||||
commentaires.Add(new Commentaire
|
|
||||||
{
|
|
||||||
IdCommentaire = i + 1,
|
|
||||||
Contenu = Lorem.Paragraph(),
|
|
||||||
Auteur = Name.FullName(),
|
|
||||||
DateCreation = DateTime.Now.AddDays(-random.Next(1, 30)), // Commentaires créés dans les 30 derniers jours
|
|
||||||
IdTitre = randomTitre.IdTitre,
|
|
||||||
Titre = randomTitre
|
|
||||||
});
|
|
||||||
|
|
||||||
randomTitre.Commentaires.Add(commentaires.Last());
|
|
||||||
}
|
|
||||||
|
|
||||||
return commentaires;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,170 +2,168 @@
|
|||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
namespace Webzine.Entity.Fixtures
|
namespace Webzine.Entity.Fixtures;
|
||||||
|
|
||||||
|
using Bogus;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe pour générer des données de test locales, telles que des listes d'artistes, de
|
||||||
|
/// titres, de styles, de commentaires et d'albums, afin de faciliter le peuplement de la base de données
|
||||||
|
/// et les données lcoales.
|
||||||
|
/// </summary>
|
||||||
|
public class SeedDataLocal
|
||||||
{
|
{
|
||||||
using Bogus;
|
/// <summary>
|
||||||
public class SeedDataLocal
|
/// Génére une liste d'artiste.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nombre">Nombre d'artiste.</param>
|
||||||
|
/// <returns>Liste d'artiste.</returns>
|
||||||
|
public static List<Artiste> GenererListeArtiste(int nombre)
|
||||||
{
|
{
|
||||||
public SeedDataLocal()
|
int idStart = 1;
|
||||||
|
Faker<Artiste> artistes = new Faker<Artiste>("fr")
|
||||||
|
.RuleFor(a => a.IdArtiste, f => f.IndexFaker + idStart) // Créé les id des artistes de manière incrémentale
|
||||||
|
.RuleFor(a => a.Nom, f => f.Person.FullName)
|
||||||
|
.RuleFor(a => a.Biographie, f => f.Lorem.Paragraph(2));
|
||||||
|
|
||||||
|
return artistes.Generate(nombre);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Génére une liste de titres.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="count">Nombre de titres à créer.</param>
|
||||||
|
/// <param name="artistes">Liste d'artistes.</param>
|
||||||
|
/// <param name="styles">Liste de styles.</param>
|
||||||
|
/// <param name="albums">Liste d'albums.</param>
|
||||||
|
/// <returns>Liste de titres.</returns>
|
||||||
|
public static List<Titre> GenererListeTitre(
|
||||||
|
int count,
|
||||||
|
List<Artiste> artistes,
|
||||||
|
List<Style> styles,
|
||||||
|
List<string> albums)
|
||||||
|
{
|
||||||
|
Random random = new Random();
|
||||||
|
int idStart = 1;
|
||||||
|
|
||||||
|
Faker<Titre> faker = new Faker<Titre>("fr")
|
||||||
|
.RuleFor(a => a.IdTitre, f => f.IndexFaker + idStart)
|
||||||
|
.RuleFor(t => t.Libelle, f => f.Lorem.Sentence(3).Replace(".", string.Empty))
|
||||||
|
.RuleFor(t => t.Chronique, f => f.Lorem.Paragraphs(3))
|
||||||
|
.RuleFor(t => t.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(120), DateTimeKind.Utc))
|
||||||
|
.RuleFor(t => t.DateSortie, (f, t) => DateTime.SpecifyKind(f.Date.Past(10, t.DateCreation), DateTimeKind.Utc))
|
||||||
|
.RuleFor(t => t.Duree, f => f.Random.Int(120, 420))
|
||||||
|
.RuleFor(t => t.UrlJaquette, f => $"https://picsum.photos/seed/{Guid.NewGuid():N}/640/640")
|
||||||
|
.RuleFor(t => t.UrlEcoute, f => $"https://example.com/listen/{Guid.NewGuid():N}")
|
||||||
|
.RuleFor(t => t.NbLectures, f => f.Random.Int(0, 5000))
|
||||||
|
.RuleFor(t => t.NbLikes, f => f.Random.Int(0, 1000))
|
||||||
|
.RuleFor(t => t.Album, f => f.PickRandom(albums))
|
||||||
|
.RuleFor(t => t.Artiste, f => f.PickRandom(artistes))
|
||||||
|
.RuleFor(t => t.Commentaires, f => new List<Commentaire>());
|
||||||
|
List<Titre> titres = faker.Generate(count);
|
||||||
|
|
||||||
|
foreach (Titre titre in titres)
|
||||||
{
|
{
|
||||||
|
int nbStyles = random.Next(1, 4);
|
||||||
|
|
||||||
}
|
titre.Styles = styles
|
||||||
|
.OrderBy(_ => Guid.NewGuid())
|
||||||
/// <summary>
|
.Take(nbStyles)
|
||||||
/// Generer une liste d'artiste.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nombre">Nombre d'artiste.</param>
|
|
||||||
/// <returns>Liste d'artiste.</returns>
|
|
||||||
public static List<Artiste> GenererListeArtiste(int nombre)
|
|
||||||
{
|
|
||||||
int idStart = 1;
|
|
||||||
Faker<Artiste> artistes = new Faker<Artiste>("fr")
|
|
||||||
.RuleFor(a => a.IdArtiste, f => f.IndexFaker + idStart) // Créé les id des artistes de manière incrémentale
|
|
||||||
.RuleFor(a => a.Nom, f => f.Person.FullName)
|
|
||||||
.RuleFor(a => a.Biographie, f => f.Lorem.Paragraph(2));
|
|
||||||
|
|
||||||
return artistes.Generate(nombre);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Generer une liste de titres.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Nombre de titres à créer.</param>
|
|
||||||
/// <param name="artistes">Liste d'artistes.</param>
|
|
||||||
/// <param name="styles">Liste de styles.</param>
|
|
||||||
/// <param name="albums">Liste d'albums.</param>
|
|
||||||
/// <param name="commentaires">Liste de commentaires.</param>
|
|
||||||
/// <returns>Liste de titres.</returns>
|
|
||||||
public static List<Titre> GenererListeTitre(
|
|
||||||
int count,
|
|
||||||
List<Artiste> artistes,
|
|
||||||
List<Style> styles,
|
|
||||||
List<string> albums
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Random random = new Random();
|
|
||||||
int idStart = 1;
|
|
||||||
|
|
||||||
Faker<Titre> faker = new Faker<Titre>("fr")
|
|
||||||
.RuleFor(a => a.IdTitre, f => f.IndexFaker + idStart)
|
|
||||||
.RuleFor(t => t.Libelle, f => f.Lorem.Sentence(3).Replace(".", string.Empty))
|
|
||||||
.RuleFor(t => t.Chronique, f => f.Lorem.Paragraphs(3))
|
|
||||||
.RuleFor(t => t.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(120), DateTimeKind.Utc))
|
|
||||||
.RuleFor(t => t.DateSortie, (f, t) => DateTime.SpecifyKind(f.Date.Past(10, t.DateCreation), DateTimeKind.Utc))
|
|
||||||
.RuleFor(t => t.Duree, f => f.Random.Int(120, 420))
|
|
||||||
.RuleFor(t => t.UrlJaquette, f => $"https://picsum.photos/seed/{Guid.NewGuid():N}/640/640")
|
|
||||||
.RuleFor(t => t.UrlEcoute, f => $"https://example.com/listen/{Guid.NewGuid():N}")
|
|
||||||
.RuleFor(t => t.NbLectures, f => f.Random.Int(0, 5000))
|
|
||||||
.RuleFor(t => t.NbLikes, f => f.Random.Int(0, 1000))
|
|
||||||
.RuleFor(t => t.Album, f => f.PickRandom(albums))
|
|
||||||
.RuleFor(t => t.Artiste, f => f.PickRandom(artistes))
|
|
||||||
.RuleFor(t => t.Commentaires, f => new List<Commentaire>());
|
|
||||||
List<Titre> titres = faker.Generate(count);
|
|
||||||
|
|
||||||
foreach (Titre titre in titres)
|
|
||||||
{
|
|
||||||
int nbStyles = random.Next(1, 4);
|
|
||||||
|
|
||||||
titre.Styles = styles
|
|
||||||
.OrderBy(_ => Guid.NewGuid())
|
|
||||||
.Take(nbStyles)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
titre.IdArtiste = titre.Artiste.IdArtiste;
|
|
||||||
}
|
|
||||||
|
|
||||||
return titres;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Générer une liste de styles pour seeder la base
|
|
||||||
/// de données.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="minCount">Le nombre minimum de styles pouvant être créés.</params>
|
|
||||||
/// <param name="maxCount">Le nombre maximun de styles pouvant être créés.</params>
|
|
||||||
/// <returns>Liste de styles.</returns>
|
|
||||||
public static List<Style> GenererListeStyle(int minCount = 15, int maxCount = 20)
|
|
||||||
{
|
|
||||||
List<string> libelles = new List<string>
|
|
||||||
{
|
|
||||||
"Pop",
|
|
||||||
"Rock",
|
|
||||||
"Jazz",
|
|
||||||
"Blues",
|
|
||||||
"Hip-Hop",
|
|
||||||
"Rap",
|
|
||||||
"Electro",
|
|
||||||
"Techno",
|
|
||||||
"House",
|
|
||||||
"Metal",
|
|
||||||
"Funk",
|
|
||||||
"Soul",
|
|
||||||
"R&B",
|
|
||||||
"Classique",
|
|
||||||
"Reggae",
|
|
||||||
"Punk",
|
|
||||||
"Folk",
|
|
||||||
"Disco",
|
|
||||||
"Ambient",
|
|
||||||
"Indie",
|
|
||||||
};
|
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
int count = random.Next(minCount, maxCount + 1);
|
|
||||||
|
|
||||||
return libelles
|
|
||||||
.Take(count)
|
|
||||||
.Select((libelle, index) => new Style
|
|
||||||
{
|
|
||||||
IdStyle = index + 1,
|
|
||||||
Libelle = libelle,
|
|
||||||
})
|
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
titre.IdArtiste = titre.Artiste.IdArtiste;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
return titres;
|
||||||
/// Générer une liste de commentaires pour seeder la base
|
}
|
||||||
/// de données.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="titre">Titre.</param>
|
/// Génére une liste de styles pour seeder la base
|
||||||
/// <param name="min">Le nombre minimum de commentaires pouvant être créés. La valeur par défaut est 0.</params>
|
/// de données.
|
||||||
/// <param name="max">Le nombre maximun de commentaires pouvant être créés. La valeur par défaut est 5.</params>
|
/// </summary>
|
||||||
/// <returns>Liste de commentaire.</returns>
|
/// <param name="minCount">Le nombre minimum de styles pouvant être créés.</params>
|
||||||
public static List<Commentaire> GenererListeCommentaire(Titre titre, int min = 0, int max = 5, int idStart = 1)
|
/// <param name="maxCount">Le nombre maximun de styles pouvant être créés.</params>
|
||||||
|
/// <returns>Liste de styles.</returns>
|
||||||
|
public static List<Style> GenererListeStyle(int minCount = 15, int maxCount = 20)
|
||||||
|
{
|
||||||
|
List<string> libelles = new List<string>
|
||||||
{
|
{
|
||||||
Random random = new Random();
|
"Pop",
|
||||||
int count = random.Next(min, max + 1);
|
"Rock",
|
||||||
|
"Jazz",
|
||||||
|
"Blues",
|
||||||
|
"Hip-Hop",
|
||||||
|
"Rap",
|
||||||
|
"Electro",
|
||||||
|
"Techno",
|
||||||
|
"House",
|
||||||
|
"Metal",
|
||||||
|
"Funk",
|
||||||
|
"Soul",
|
||||||
|
"R&B",
|
||||||
|
"Classique",
|
||||||
|
"Reggae",
|
||||||
|
"Punk",
|
||||||
|
"Folk",
|
||||||
|
"Disco",
|
||||||
|
"Ambient",
|
||||||
|
"Indie",
|
||||||
|
};
|
||||||
|
|
||||||
Faker<Commentaire> faker = new Faker<Commentaire>("fr")
|
Random random = new Random();
|
||||||
.RuleFor(a => a.IdCommentaire, f => f.IndexFaker + idStart)
|
int count = random.Next(minCount, maxCount + 1);
|
||||||
.RuleFor(c => c.Auteur, f => f.Internet.UserName())
|
|
||||||
.RuleFor(c => c.Contenu, f => f.Lorem.Sentences(2))
|
|
||||||
.RuleFor(c => c.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(60), DateTimeKind.Utc))
|
|
||||||
.RuleFor(c => c.Titre, _ => titre)
|
|
||||||
.RuleFor(c => c.IdTitre, _ => titre.IdTitre);
|
|
||||||
|
|
||||||
return faker.Generate(count);
|
return libelles
|
||||||
}
|
.Take(count)
|
||||||
|
.Select((libelle, index) => new Style
|
||||||
/// <summary>
|
|
||||||
/// Générer une liste d'albums pour seeder la base
|
|
||||||
/// de données.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nombre">Le nombre d'albums à générer.</param>
|
|
||||||
/// <returns>Liste d'albums.</returns>
|
|
||||||
public static List<string> GenererListeAlbums(int nombre)
|
|
||||||
{
|
|
||||||
Faker faker = new Faker("fr");
|
|
||||||
|
|
||||||
HashSet<string> albums = new HashSet<string>();
|
|
||||||
|
|
||||||
while (albums.Count < nombre)
|
|
||||||
{
|
{
|
||||||
albums.Add(faker.Company.CatchPhrase());
|
IdStyle = index + 1,
|
||||||
}
|
Libelle = libelle,
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
return albums.ToList();
|
/// <summary>
|
||||||
|
/// Génére une liste de commentaires pour seeder la base
|
||||||
|
/// de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="titre">Titre.</param>
|
||||||
|
/// <param name="min">Le nombre minimum de commentaires pouvant être créés. La valeur par défaut est 0.</params>
|
||||||
|
/// <param name="max">Le nombre maximun de commentaires pouvant être créés. La valeur par défaut est 5.</params>
|
||||||
|
/// <returns>Liste de commentaire.</returns>
|
||||||
|
public static List<Commentaire> GenererListeCommentaire(Titre titre, int min = 0, int max = 5, int idStart = 1)
|
||||||
|
{
|
||||||
|
Random random = new Random();
|
||||||
|
int count = random.Next(min, max + 1);
|
||||||
|
|
||||||
|
Faker<Commentaire> faker = new Faker<Commentaire>("fr")
|
||||||
|
.RuleFor(a => a.IdCommentaire, f => f.IndexFaker + idStart)
|
||||||
|
.RuleFor(c => c.Auteur, f => f.Internet.UserName())
|
||||||
|
.RuleFor(c => c.Contenu, f => f.Lorem.Sentences(2))
|
||||||
|
.RuleFor(c => c.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(60), DateTimeKind.Utc))
|
||||||
|
.RuleFor(c => c.Titre, _ => titre)
|
||||||
|
.RuleFor(c => c.IdTitre, _ => titre.IdTitre);
|
||||||
|
|
||||||
|
return faker.Generate(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Génére une liste d'albums pour seeder la base
|
||||||
|
/// de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nombre">Le nombre d'albums à générer.</param>
|
||||||
|
/// <returns>Liste d'albums.</returns>
|
||||||
|
public static List<string> GenererListeAlbums(int nombre)
|
||||||
|
{
|
||||||
|
Faker faker = new Faker("fr");
|
||||||
|
|
||||||
|
HashSet<string> albums = new HashSet<string>();
|
||||||
|
|
||||||
|
while (albums.Count < nombre)
|
||||||
|
{
|
||||||
|
albums.Add(faker.Company.CatchPhrase());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return albums.ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,5 +2,4 @@ namespace Webzine.Entity.Fixtures;
|
|||||||
|
|
||||||
public class SeedDataSpotify
|
public class SeedDataSpotify
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
// <copyright file="StyleFactory.cs" company="PlaceholderCompany">
|
|
||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
namespace Webzine.Entity.Fixtures
|
|
||||||
{
|
|
||||||
using Webzine.Entity;
|
|
||||||
public class StyleFactory
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
using Bogus;
|
|
||||||
using Faker;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Webzine.Entity;
|
|
||||||
|
|
||||||
namespace Webzine.Repository.Fake
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Classe de fabrique pour générer des données factices (fake data) pour les entités Artiste et Titre.
|
|
||||||
/// </summary>
|
|
||||||
public static class FakeDataFactory
|
|
||||||
{
|
|
||||||
//https://cdn-images.dzcdn.net/images/cover/311bba0fc112d15f72c8b5a65f0456c1/1900x1900-000000-80-0-0.jpg",
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste d'artistes avec des données factices, incluant des titres associés à chaque artiste.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Le nombre d'artistes à générer. Par défaut, 10 artistes seront générés.</param>
|
|
||||||
/// <returns>Une liste d'objets Artiste avec des titres associés, générés de manière aléatoire.</returns>
|
|
||||||
public static List<Artiste> GetArtistes(int count = 10)
|
|
||||||
{
|
|
||||||
var artistes = new List<Artiste>();
|
|
||||||
|
|
||||||
for (int i = 1; i <= count; i++)
|
|
||||||
{
|
|
||||||
artistes.Add(new Artiste
|
|
||||||
{
|
|
||||||
IdArtiste = i,
|
|
||||||
Nom = Name.FullName(),
|
|
||||||
Biographie = Lorem.Paragraph(),
|
|
||||||
Titres = new List<Titre>()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return artistes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Génère une liste de titres avec des données factices, en associant chaque titre à un artiste existant.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="count">Le nombre de titres à générer. Par défaut, 40 titres seront générés.</param>
|
|
||||||
/// <returns>Une liste d'objets Titre avec des données factices, associés à des artistes générés de manière aléatoire.</returns>
|
|
||||||
public static List<Titre> GetTitres(int count = 40)
|
|
||||||
{
|
|
||||||
var artistes = GetArtistes();
|
|
||||||
var titres = new List<Titre>();
|
|
||||||
|
|
||||||
for (int i = 1; i <= count; i++)
|
|
||||||
{
|
|
||||||
var artiste = artistes[RandomNumber.Next(0, artistes.Count - 1)];
|
|
||||||
|
|
||||||
var titre = new Titre
|
|
||||||
{
|
|
||||||
IdTitre = i,
|
|
||||||
IdArtiste = artiste.IdArtiste,
|
|
||||||
Artiste = artiste,
|
|
||||||
Libelle = Lorem.Sentence(3),
|
|
||||||
Chronique = Lorem.Paragraph(),
|
|
||||||
DateCreation = DateTime.Now.AddDays(-RandomNumber.Next(1, 100)),
|
|
||||||
DateSortie = DateTime.Now.AddYears(-RandomNumber.Next(1, 20)),
|
|
||||||
Duree = RandomNumber.Next(120, 420),
|
|
||||||
UrlJaquette = "https://picsum.photos/300",
|
|
||||||
UrlEcoute = Internet.Url(),
|
|
||||||
NbLectures = RandomNumber.Next(0, 500),
|
|
||||||
NbLikes = RandomNumber.Next(0, 200),
|
|
||||||
Album = Lorem.Sentence(2),
|
|
||||||
Commentaires = new List<Commentaire>()
|
|
||||||
};
|
|
||||||
|
|
||||||
titres.Add(titre);
|
|
||||||
artiste.Titres.Add(titre);
|
|
||||||
}
|
|
||||||
|
|
||||||
return titres;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace Webzine.Entity
|
||||||
|
|
||||||
namespace Webzine.Entity
|
|
||||||
{
|
{
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe représentant un style de musique.
|
/// Classe représentant un style de musique.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -26,4 +26,4 @@ namespace Webzine.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Titre> Titres { get; set; } = new List<Titre>();
|
public List<Titre> Titres { get; set; } = new List<Titre>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace Webzine.Entity
|
||||||
|
|
||||||
namespace Webzine.Entity
|
|
||||||
{
|
{
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe représentant un titre de musique.
|
/// Classe représentant un titre de musique.
|
||||||
/// Lien avec l'entité <see cref="Artiste"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
|
/// Lien avec l'entité <see cref="Artiste"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
|
||||||
@@ -107,4 +107,4 @@ namespace Webzine.Entity
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Style> Styles { get; set; } = new List<Style>();
|
public List<Style> Styles { get; set; } = new List<Style>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
namespace Webzine.Repository.Contracts
|
namespace Webzine.Repository.Contracts
|
||||||
{
|
{
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
/// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IArtisteRepository
|
public interface IArtisteRepository
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Webzine.Entity;
|
|
||||||
|
|
||||||
namespace Webzine.Repository.Contracts
|
namespace Webzine.Repository.Contracts
|
||||||
{
|
{
|
||||||
|
using Webzine.Entity;
|
||||||
|
|
||||||
public interface ICommentaireRepository
|
public interface ICommentaireRepository
|
||||||
{
|
{
|
||||||
void Add(Commentaire commentaire);
|
void Add(Commentaire commentaire);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Webzine.Entity;
|
|
||||||
|
|
||||||
namespace Webzine.Repository.Contracts
|
namespace Webzine.Repository.Contracts
|
||||||
{
|
{
|
||||||
|
using Webzine.Entity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interface définissant les opérations de base pour le repository de styles, permettant d'ajouter, supprimer, trouver et mettre à jour des styles dans la source de données.
|
/// Interface définissant les opérations de base pour le repository de styles, permettant d'ajouter, supprimer, trouver et mettre à jour des styles dans la source de données.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Webzine.Entity;
|
namespace Webzine.Repository.Contracts
|
||||||
|
|
||||||
namespace Webzine.Repository.Contracts
|
|
||||||
{
|
{
|
||||||
|
using Webzine.Entity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interface qui définit les opérations de base pour la gestion des titres dans une source de données.
|
/// Interface qui définit les opérations de base pour la gestion des titres dans une source de données.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -78,4 +78,4 @@ namespace Webzine.Repository.Contracts
|
|||||||
/// <param name="titre">L'objet titre à mettre à jour.</param>
|
/// <param name="titre">L'objet titre à mettre à jour.</param>
|
||||||
void Update(Titre titre);
|
void Update(Titre titre);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,8 +5,10 @@
|
|||||||
namespace Webzine.Repository
|
namespace Webzine.Repository
|
||||||
{
|
{
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
using Webzine.EntitiesContext;
|
using Webzine.EntitiesContext;
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
@@ -17,7 +19,7 @@ namespace Webzine.Repository
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class DbArtisteRepository : IArtisteRepository
|
public class DbArtisteRepository : IArtisteRepository
|
||||||
{
|
{
|
||||||
private WebzineDbContext context;
|
private readonly WebzineDbContext context;
|
||||||
private readonly ILogger<LocalArtisteRepository> logger;
|
private readonly ILogger<LocalArtisteRepository> logger;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -115,7 +117,7 @@ namespace Webzine.Repository
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerable<Artiste> FindAll()
|
public IEnumerable<Artiste> FindAll()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// .AsNoTracking() rend la requête beaucoup plus rapide pour de la lecture
|
// .AsNoTracking() rend la requête beaucoup plus rapide pour de la lecture
|
||||||
var artistes = this.context.Artistes.AsNoTracking().ToList();
|
var artistes = this.context.Artistes.AsNoTracking().ToList();
|
||||||
@@ -127,15 +129,15 @@ namespace Webzine.Repository
|
|||||||
this.logger.LogError(ex, "Erreur lors de la récupération de tous les artistes.");
|
this.logger.LogError(ex, "Erreur lors de la récupération de tous les artistes.");
|
||||||
return Enumerable.Empty<Artiste>(); // Retourne une liste vide au lieu de faire crash l'UI
|
return Enumerable.Empty<Artiste>(); // Retourne une liste vide au lieu de faire crash l'UI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void Update(Artiste artiste)
|
public void Update(Artiste artiste)
|
||||||
{
|
{
|
||||||
if (artiste == null)
|
if (artiste == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(artiste));
|
throw new ArgumentNullException(nameof(artiste));
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
namespace Webzine.Repository;
|
||||||
using Webzine.EntitiesContext;
|
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
using Webzine.EntitiesContext;
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
namespace Webzine.Repository;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe qui implémente le repository pour les commentaires en utilisant une base de données.
|
/// Classe qui implémente le repository pour les commentaires en utilisant une base de données.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -15,6 +16,7 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
private readonly WebzineDbContext context;
|
private readonly WebzineDbContext context;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DbCommentaireRepository"/> class.
|
||||||
/// Initialisation de <see cref="DbCommentaireRepository"/>.
|
/// Initialisation de <see cref="DbCommentaireRepository"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Webzine.EntitiesContext;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Webzine.EntitiesContext;
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Webzine.Entity;
|
namespace Webzine.Repository
|
||||||
|
|
||||||
namespace Webzine.Repository
|
|
||||||
{
|
{
|
||||||
|
using Webzine.Entity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Représente un entrepôt de données en mémoire (Mock) pour l'application.
|
/// Représente un entrepôt de données en mémoire (Mock) pour l'application.
|
||||||
/// Cette classe simule une base de données en stockant les entités dans des listes statiques
|
/// Cette classe simule une base de données en stockant les entités dans des listes statiques
|
||||||
@@ -12,21 +12,21 @@ namespace Webzine.Repository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit la liste des artistes enregistrés.
|
/// Obtient ou définit la liste des artistes enregistrés.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Artiste> Artistes { get; set; } = new();
|
public List<Artiste> Artistes { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit la liste des titres (morceaux) musicaux.
|
/// Obtient ou définit la liste des titres (morceaux) musicaux.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Titre> Titres { get; set; } = new();
|
public List<Titre> Titres { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit la liste des styles musicaux disponibles.
|
/// Obtient ou définit la liste des styles musicaux disponibles.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Style> Styles { get; set; } = new();
|
public List<Style> Styles { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit la liste des commentaires rédigés par les utilisateurs.
|
/// Obtient ou définit la liste des commentaires rédigés par les utilisateurs.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Commentaire> Commentaires { get; set; } = new();
|
public List<Commentaire> Commentaires { get; set; } = new ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
namespace Webzine.Repository
|
namespace Webzine.Repository
|
||||||
{
|
{
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
@@ -15,9 +16,9 @@ namespace Webzine.Repository
|
|||||||
public class LocalArtisteRepository : IArtisteRepository
|
public class LocalArtisteRepository : IArtisteRepository
|
||||||
{
|
{
|
||||||
private readonly ILogger<LocalArtisteRepository> logger;
|
private readonly ILogger<LocalArtisteRepository> logger;
|
||||||
//private readonly List<Artiste> artistes;
|
|
||||||
private readonly InMemoryDataStore dataStore;
|
|
||||||
|
|
||||||
|
// private readonly List<Artiste> artistes;
|
||||||
|
private readonly InMemoryDataStore dataStore;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
|
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
|
||||||
@@ -28,7 +29,8 @@ namespace Webzine.Repository
|
|||||||
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
|
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
//this.artistes = artistes;
|
|
||||||
|
// this.artistes = artistes;
|
||||||
this.dataStore = dataStore;
|
this.dataStore = dataStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ namespace Webzine.Repository
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Webzine.Entity;
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Entity;
|
||||||
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialise une classe <see cref="LocalCommentaireRepository"/> qui implémente l'interface <see cref="ICommentaireRepository"/> pour gérer les opérations liées aux commentaires.
|
/// Initialise une classe <see cref="LocalCommentaireRepository"/> qui implémente l'interface <see cref="ICommentaireRepository"/> pour gérer les opérations liées aux commentaires.
|
||||||
@@ -21,6 +23,7 @@ using Webzine.Repository.Contracts;
|
|||||||
private readonly InMemoryDataStore dataStore;
|
private readonly InMemoryDataStore dataStore;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="LocalCommentaireRepository"/> class.
|
||||||
/// Initialise une nouvelle instance du <see cref="LocalCommentaireRepository"/> .
|
/// Initialise une nouvelle instance du <see cref="LocalCommentaireRepository"/> .
|
||||||
/// Est liée à un magasin de données en mémoire et utilise un logger pour enregistrer les opérations.
|
/// Est liée à un magasin de données en mémoire et utilise un logger pour enregistrer les opérations.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -55,7 +58,7 @@ using Webzine.Repository.Contracts;
|
|||||||
{
|
{
|
||||||
var commentaire = this.dataStore.Commentaires.FirstOrDefault(c => c.IdCommentaire == idCommentaire);
|
var commentaire = this.dataStore.Commentaires.FirstOrDefault(c => c.IdCommentaire == idCommentaire);
|
||||||
if (commentaire == null)
|
if (commentaire == null)
|
||||||
{
|
{
|
||||||
return new Commentaire();
|
return new Commentaire();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,4 +97,4 @@ using Webzine.Repository.Contracts;
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,8 @@ namespace Webzine.Repository;
|
|||||||
public class LocalStyleRepository : IStyleRepository
|
public class LocalStyleRepository : IStyleRepository
|
||||||
{
|
{
|
||||||
private readonly ILogger<LocalStyleRepository> logger;
|
private readonly ILogger<LocalStyleRepository> logger;
|
||||||
//private readonly List<Style> styles;
|
|
||||||
|
// private readonly List<Style> styles;
|
||||||
private readonly InMemoryDataStore dataStore;
|
private readonly InMemoryDataStore dataStore;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public class ArtisteController : Controller
|
|||||||
private readonly IArtisteRepository artisteRepository;
|
private readonly IArtisteRepository artisteRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="ArtisteController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="ArtisteController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Logger.</param>
|
/// <param name="logger">Logger.</param>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Webzine.Entity;
|
|
||||||
using Webzine.Repository.Contracts;
|
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||||
{
|
{
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
using Webzine.Repository.Contracts;
|
||||||
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
|
||||||
|
|
||||||
[Area("Administration")]
|
[Area("Administration")]
|
||||||
public class CommentaireController : Controller
|
public class CommentaireController : Controller
|
||||||
{
|
{
|
||||||
@@ -12,6 +12,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
private readonly ICommentaireRepository commentaireRepository;
|
private readonly ICommentaireRepository commentaireRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="CommentaireController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="CommentaireController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="CommentaireController"/>.
|
||||||
/// Utilise l'injection de dépendances pour récupérer le repository.
|
/// Utilise l'injection de dépendances pour récupérer le repository.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -37,10 +38,10 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
// Initialisation du ViewModel
|
// Initialisation du ViewModel
|
||||||
var viewModel = new CommentaireViewModel
|
var viewModel = new CommentaireViewModel
|
||||||
{
|
{
|
||||||
Commentaires = commentaires
|
Commentaires = commentaires,
|
||||||
};
|
};
|
||||||
|
|
||||||
return View(viewModel);
|
return this.View(viewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -58,16 +59,16 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
Auteur = commentaire.Auteur,
|
Auteur = commentaire.Auteur,
|
||||||
Contenu = commentaire.Contenu,
|
Contenu = commentaire.Contenu,
|
||||||
DateCreation = commentaire.DateCreation,
|
DateCreation = commentaire.DateCreation,
|
||||||
TitreLibelle = commentaire.Titre?.Libelle
|
TitreLibelle = commentaire.Titre?.Libelle,
|
||||||
};
|
};
|
||||||
|
|
||||||
return View(model);
|
return this.View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Effectue la suppression réelle du commentaire.
|
/// Effectue la suppression réelle du commentaire.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
|
/// <param name="model">Le CommentaireDeleteViewModel.</param>
|
||||||
/// <returns>Redirection vers la vue Index après suppression.</returns>
|
/// <returns>Redirection vers la vue Index après suppression.</returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public IActionResult Delete(CommentaireDeleteViewModel model)
|
public IActionResult Delete(CommentaireDeleteViewModel model)
|
||||||
@@ -79,7 +80,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
this.commentaireRepository.Delete(commentaire);
|
this.commentaireRepository.Delete(commentaire);
|
||||||
}
|
}
|
||||||
|
|
||||||
return RedirectToAction("Index");
|
return this.RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Webzine.Entity;
|
|
||||||
using Webzine.Entity.Fixtures;
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels;
|
using Webzine.WebApplication.Areas.Administration.ViewModels;
|
||||||
|
|
||||||
@@ -16,6 +14,7 @@ public class DashboardController : Controller
|
|||||||
private readonly ITitreRepository titreRepository;
|
private readonly ITitreRepository titreRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DashboardController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="DashboardController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="DashboardController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Webzine.Repository.Contracts;
|
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||||
{
|
{
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
using Webzine.Repository.Contracts;
|
||||||
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contrôleur pour la gestion des styles dans l'administration du webzine.
|
/// Contrôleur pour la gestion des styles dans l'administration du webzine.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -14,6 +15,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
private readonly IStyleRepository styleRepository;
|
private readonly IStyleRepository styleRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="StyleController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="StyleController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="StyleController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
@@ -93,7 +95,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult Edit(int id)
|
public IActionResult Edit(int id)
|
||||||
{
|
{
|
||||||
var style = styleRepository.Find(id);
|
var style = this.styleRepository.Find(id);
|
||||||
|
|
||||||
var model = new StyleEditViewModel
|
var model = new StyleEditViewModel
|
||||||
{
|
{
|
||||||
@@ -104,4 +106,4 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
return this.View(model);
|
return this.View(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Entity.Fixtures;
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contrôleur pour la gestion des titres en administration. Ce contrôleur gère les opérations de création, modification, suppression et affichage des titres dans l'interface d'administration du webzine. Les données sont générées dynamiquement à l'aide de la classe <see cref="DataFactory"/> pour simuler un environnement de développement sans accès à une base de données réelle. Chaque action du contrôleur prépare un ViewModel spécifique pour la vue correspondante, permettant ainsi une séparation claire entre la logique métier et la présentation des données.
|
/// Contrôleur pour la gestion des titres en administration. Ce contrôleur gère les opérations de création, modification, suppression et affichage des titres dans l'interface d'administration du webzine. Chaque action du contrôleur prépare un ViewModel spécifique pour la vue correspondante, permettant ainsi une séparation claire entre la logique métier et la présentation des données.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Area("Administration")]
|
[Area("Administration")]
|
||||||
public class TitreController : Controller
|
public class TitreController : Controller
|
||||||
@@ -18,8 +17,8 @@ public class TitreController : Controller
|
|||||||
private readonly IArtisteRepository artisteRepository;
|
private readonly IArtisteRepository artisteRepository;
|
||||||
private readonly IStyleRepository styleRepository;
|
private readonly IStyleRepository styleRepository;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour la création et la modification d'un artiste dans l'administration.
|
/// ViewModel pour la création et la modification d'un artiste dans l'administration.
|
||||||
|
/// Ne contient pas les titres de l'artiste.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class AdminArtisteForm
|
public class AdminArtisteForm
|
||||||
{
|
{
|
||||||
@@ -9,13 +10,15 @@
|
|||||||
/// Définit l'identifiant de l'artiste.
|
/// Définit l'identifiant de l'artiste.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit le nom de l'artiste.
|
/// Définit le nom de l'artiste.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Nom { get; set; }
|
public string Nom { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit la biographie de l'artiste.
|
/// Définit la biographie de l'artiste.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Biographie { get; set; }
|
public string Biographie { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
// <copyright file="CommentaireViewModel.cs" company="Webzine">
|
// <copyright file="CommentaireViewModel.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Webzine. All rights reserved.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire
|
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class DashboardViewModel
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit le nombre total d'artistes chroniqués dans le webzine.
|
/// Définit le nombre total d'artistes chroniqués dans le webzine.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int NombreArtistes { get; set; }
|
public int NombreArtistes { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit le nom de l'artiste le plus chroniqué dans le webzine.
|
/// Définit le nom de l'artiste le plus chroniqué dans le webzine.
|
||||||
@@ -29,6 +29,7 @@ public class DashboardViewModel
|
|||||||
/// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine.
|
/// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int IdMusiqueLaPlusJouee { get; set; }
|
public int IdMusiqueLaPlusJouee { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit le nom de la biographie d'artiste la plus lue dans le webzine.
|
/// Définit le nom de la biographie d'artiste la plus lue dans le webzine.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,20 +1,17 @@
|
|||||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
// <copyright file="StyleCreateViewModel.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Webzine. Tout droit réservé.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour la création d'un style en administration.
|
/// ViewModel pour la création d'un style en administration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public class StyleCreateViewModel
|
public class StyleCreateViewModel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit le libellé du style.
|
/// Obtient ou définit le libellé du style.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public string Libelle { get; set; }
|
public string Libelle { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,26 +1,22 @@
|
|||||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
// <copyright file="StyleDeleteViewModel.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Webzine. Tout droit réservé.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour la suppression d'un style en administration.
|
/// ViewModel pour la suppression d'un style en administration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public class StyleDeleteViewModel
|
public class StyleDeleteViewModel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit l'identifiant du style à supprimer.
|
/// Obtient ou définit l'identifiant du style à supprimer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public int IdStyle { get; set; }
|
public int IdStyle { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit le libellé du style.
|
/// Obtient ou définit le libellé du style.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public string Libelle { get; set; }
|
public string Libelle { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,27 +1,22 @@
|
|||||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
// <copyright file="StyleEditViewModel.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Webzine. Tout droit réservé.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour la modification d'un style en administration.
|
/// ViewModel pour la modification d'un style en administration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public class StyleEditViewModel
|
public class StyleEditViewModel
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit le libellé du style.
|
/// Obtient ou définit le libellé du style.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public int IdStyle { get; set; }
|
public int IdStyle { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit le libellé du style.
|
/// Obtient ou définit le libellé du style.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
public string Libelle { get; set; }
|
public string Libelle { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ public class AdminTitreForm
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit la liste des identifiants des styles associés au titre.
|
/// Définit la liste des identifiants des styles associés au titre.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<int> Styles { get; set; } = new();
|
public List<int> Styles { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit la liste des artistes disponibles pour la sélection dans le formulaire de création ou de modification d'un titre.
|
/// Définit la liste des artistes disponibles pour la sélection dans le formulaire de création ou de modification d'un titre.
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
// <copyright file="AccueilController.cs" company=" Equipe 1 - ">
|
namespace Webzine.WebApplication.Controllers
|
||||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Controllers
|
|
||||||
{
|
{
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.ViewModels.Accueil;
|
using Webzine.WebApplication.ViewModels.Accueil;
|
||||||
|
|
||||||
@@ -19,6 +16,7 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
private readonly ITitreRepository titreRepository;
|
private readonly ITitreRepository titreRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="AccueilController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="AccueilController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="AccueilController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
@@ -46,8 +44,6 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
var derniereChronique = this.configuration.GetValue<int>("Webzine:NombreDerniereChronique");
|
var derniereChronique = this.configuration.GetValue<int>("Webzine:NombreDerniereChronique");
|
||||||
var nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
|
var nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
|
||||||
|
|
||||||
// var titres = FakeDataFactory.GetTitres();
|
|
||||||
// var titres = this.titreRepository.FindTitres(derniereChronique, nbTopTitres);
|
|
||||||
var titres = this.titreRepository.FindAll();
|
var titres = this.titreRepository.FindAll();
|
||||||
|
|
||||||
var vm = new AccueilIndexViewModel
|
var vm = new AccueilIndexViewModel
|
||||||
@@ -63,4 +59,4 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
return this.View(vm);
|
return this.View(vm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,7 @@ public class ApiController : ControllerBase
|
|||||||
private readonly ILogger<ApiController> logger;
|
private readonly ILogger<ApiController> logger;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ApiController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="ApiController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="ApiController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
@@ -25,10 +26,10 @@ public class ApiController : ControllerBase
|
|||||||
{
|
{
|
||||||
this.logger.LogInformation("Get Version was called");
|
this.logger.LogInformation("Get Version was called");
|
||||||
|
|
||||||
return Ok(new
|
return this.Ok(new
|
||||||
{
|
{
|
||||||
nom = "webzine",
|
nom = "webzine",
|
||||||
version = "2.0",
|
version = "2.0",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Webzine.WebApplication.Controllers
|
namespace Webzine.WebApplication.Controllers
|
||||||
{
|
{
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Webzine.Entity.Fixtures;
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.ViewModels.Artiste;
|
using Webzine.WebApplication.ViewModels.Artiste;
|
||||||
|
|
||||||
@@ -9,18 +9,20 @@
|
|||||||
{
|
{
|
||||||
// Injection du logger via le constructeur
|
// Injection du logger via le constructeur
|
||||||
private readonly ILogger<ArtisteController> logger;
|
private readonly ILogger<ArtisteController> logger;
|
||||||
private readonly IArtisteRepository _artisteRepository;
|
private readonly IArtisteRepository artisteRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
|
||||||
/// Initialise une nouvelle instance du <see cref="ArtisteController"/>. avec un service de journalisation injecté.
|
/// Initialise une nouvelle instance du <see cref="ArtisteController"/>. avec un service de journalisation injecté.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
public ArtisteController(ILogger<ArtisteController> logger,
|
public ArtisteController(
|
||||||
|
ILogger<ArtisteController> logger,
|
||||||
IArtisteRepository artisteRepository)
|
IArtisteRepository artisteRepository)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.logger.LogDebug("Initialisation du ArtisteController");
|
this.logger.LogDebug("Initialisation du ArtisteController");
|
||||||
this._artisteRepository = artisteRepository;
|
this.artisteRepository = artisteRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -44,7 +46,7 @@
|
|||||||
.ToTitleCase(nom.Replace("-", " "));
|
.ToTitleCase(nom.Replace("-", " "));
|
||||||
|
|
||||||
// On appelle la factory pour obtenir l'artiste unique
|
// On appelle la factory pour obtenir l'artiste unique
|
||||||
var artiste = this._artisteRepository.FindByName(nomPropre);
|
var artiste = this.artisteRepository.FindByName(nomPropre);
|
||||||
|
|
||||||
// Check if artiste was found
|
// Check if artiste was found
|
||||||
if (artiste == null)
|
if (artiste == null)
|
||||||
@@ -68,4 +70,4 @@
|
|||||||
return this.View(viewModel);
|
return this.View(viewModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
namespace Webzine.WebApplication.Controllers
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Controllers
|
|
||||||
{
|
{
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Controller pour la page contact.
|
/// Controller pour la page contact.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -11,6 +11,7 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
private readonly ILogger<ContactController> logger;
|
private readonly ILogger<ContactController> logger;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ContactController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="ContactController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="ContactController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
@@ -29,4 +30,4 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
return this.View();
|
return this.View();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
// <copyright file="RechercheController.cs" company=" Equipe 1 - ">
|
// <copyright file="RechercheController.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Controllers
|
namespace Webzine.WebApplication.Controllers
|
||||||
{
|
{
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.ViewModels.Recherche;
|
using Webzine.WebApplication.ViewModels.Recherche;
|
||||||
using Webzine.WebApplication.ViewModels.Titre;
|
using Webzine.WebApplication.ViewModels.Titre;
|
||||||
@@ -65,4 +66,4 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
return this.View(vm);
|
return this.View(vm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
// <copyright file="TitreController.cs" company=" Equipe 1 - ">
|
// <copyright file="TitreController.cs" company="PlaceholderCompany">
|
||||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||||
// </copyright>
|
// </copyright>
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Controllers
|
namespace Webzine.WebApplication.Controllers
|
||||||
{
|
{
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
using Webzine.WebApplication.ViewModels.Titre;
|
using Webzine.WebApplication.ViewModels.Titre;
|
||||||
@@ -21,6 +22,7 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
private readonly ITitreRepository titreRepository;
|
private readonly ITitreRepository titreRepository;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
||||||
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecte.</param>
|
/// <param name="logger">Service de journalisation injecte.</param>
|
||||||
@@ -168,4 +170,4 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
18
Webzine.WebApplication/Extensions/RouteConfiguration.cs
Normal file
18
Webzine.WebApplication/Extensions/RouteConfiguration.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace Webzine.WebApplication.Extensions;
|
||||||
|
|
||||||
|
public static class RouteConfiguration
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Configure les routes de l'application.
|
||||||
|
/// </summary>
|
||||||
|
public static void MapCustomRoutes(this IEndpointRouteBuilder endpoints)
|
||||||
|
{
|
||||||
|
endpoints.MapControllerRoute(
|
||||||
|
name: "areas",
|
||||||
|
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
|
||||||
|
|
||||||
|
endpoints.MapControllerRoute(
|
||||||
|
name: "default",
|
||||||
|
pattern: "{controller=Accueil}/{action=Index}/{id?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
using NLog;
|
using NLog;
|
||||||
using NLog.Web;
|
using NLog.Web;
|
||||||
|
|
||||||
using Webzine.EntitiesContext;
|
using Webzine.EntitiesContext;
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Entity.Fixtures;
|
using Webzine.Entity.Fixtures;
|
||||||
using Webzine.Repository;
|
using Webzine.Repository;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
using Webzine.WebApplication.Extensions;
|
||||||
|
|
||||||
// Initiation du logger NLog pour la classe courante afin de pouvoir l'utiliser pour logger des messages d'information, d'erreur, etc avant la construction de l'application.
|
// Initiation du logger NLog pour la classe courante afin de pouvoir l'utiliser pour logger des messages d'information, d'erreur, etc avant la construction de l'application.
|
||||||
var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
|
var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
|
||||||
@@ -18,6 +21,7 @@ try
|
|||||||
// Ajoute les services necessaires pour permettre l'utilisation des
|
// Ajoute les services necessaires pour permettre l'utilisation des
|
||||||
// controllers avec des vues.
|
// controllers avec des vues.
|
||||||
builder.Services.AddControllersWithViews()
|
builder.Services.AddControllersWithViews()
|
||||||
|
|
||||||
// Ajoute la compilation des vues lors de l'execution de l'application.
|
// Ajoute la compilation des vues lors de l'execution de l'application.
|
||||||
// Cela nous evite de recompiler l'application a chaque modification de vue.
|
// Cela nous evite de recompiler l'application a chaque modification de vue.
|
||||||
// Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
|
// Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
|
||||||
@@ -42,6 +46,7 @@ try
|
|||||||
builder.Services.AddDbContext<WebzineDbContext>(options =>
|
builder.Services.AddDbContext<WebzineDbContext>(options =>
|
||||||
options.UseNpgsql(builder.Configuration.GetConnectionString("PostGreSQLConnection")));
|
options.UseNpgsql(builder.Configuration.GetConnectionString("PostGreSQLConnection")));
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.Services.AddScoped<DbEntityRepository>();
|
builder.Services.AddScoped<DbEntityRepository>();
|
||||||
builder.Services.AddScoped<ITitreRepository, DbTitreRepository>();
|
builder.Services.AddScoped<ITitreRepository, DbTitreRepository>();
|
||||||
builder.Services.AddScoped<IStyleRepository, DbStyleRepository>();
|
builder.Services.AddScoped<IStyleRepository, DbStyleRepository>();
|
||||||
@@ -117,7 +122,7 @@ try
|
|||||||
|
|
||||||
app.UseResponseCompression();
|
app.UseResponseCompression();
|
||||||
|
|
||||||
// Active la possibilite de servir des fichiers statiques presents dans
|
// Active la possibilité de servir des fichiers statiques presents dans
|
||||||
// le dossier wwwroot.
|
// le dossier wwwroot.
|
||||||
app.UseStaticFiles(new StaticFileOptions
|
app.UseStaticFiles(new StaticFileOptions
|
||||||
{
|
{
|
||||||
@@ -131,16 +136,8 @@ try
|
|||||||
// Active le middleware permettant le routage des requetes entrantes.
|
// Active le middleware permettant le routage des requetes entrantes.
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
// Ajoute une route pour les zones (Areas) comme Admin
|
// Appelle les routes définies dans le dossier Extensions.
|
||||||
app.MapControllerRoute(
|
app.MapCustomRoutes();
|
||||||
name: "areas",
|
|
||||||
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
|
|
||||||
|
|
||||||
// Ajoute un endpoint permettant de router les urls
|
|
||||||
// avec la forme /controller/action/id(optionnel).
|
|
||||||
app.MapControllerRoute(
|
|
||||||
name: "default",
|
|
||||||
pattern: "{controller=Accueil}/{action=Index}/{id?}");
|
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
}
|
}
|
||||||
@@ -154,4 +151,4 @@ finally
|
|||||||
{
|
{
|
||||||
// Assure que NLog flush tous les messages de log avant de fermer l'application.
|
// Assure que NLog flush tous les messages de log avant de fermer l'application.
|
||||||
LogManager.Shutdown();
|
LogManager.Shutdown();
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Webzine.Repository.Contracts;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.ViewComponents
|
namespace Webzine.WebApplication.ViewComponents
|
||||||
{
|
{
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// View component pour la sidebar, récupère les styles depuis le repository.
|
/// View component pour la sidebar, récupère les styles depuis le repository.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
namespace Webzine.WebApplication.ViewModels.Artiste
|
namespace Webzine.WebApplication.ViewModels.Artiste
|
||||||
{
|
{
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour afficher les informations d'un artiste et ses titres groupés par album.
|
/// ViewModel pour afficher les informations d'un artiste et ses titres groupés par album.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -27,4 +28,4 @@
|
|||||||
public IEnumerable<IGrouping<string?, Titre>> AlbumsGroupes { get; set; }
|
public IEnumerable<IGrouping<string?, Titre>> AlbumsGroupes { get; set; }
|
||||||
= Enumerable.Empty<IGrouping<string?, Titre>>();
|
= Enumerable.Empty<IGrouping<string?, Titre>>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,4 +14,4 @@ public class RechercheArtisteItem
|
|||||||
/// Nombre de titres associes a l'artiste.
|
/// Nombre de titres associes a l'artiste.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int NombreDeTitres { get; set; }
|
public int NombreDeTitres { get; set; }
|
||||||
}
|
}
|
||||||
@@ -15,10 +15,10 @@ public class RechercheIndexViewModel
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Artistes trouves.
|
/// Artistes trouves.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<RechercheArtisteItem> Artistes { get; set; } = new();
|
public List<RechercheArtisteItem> Artistes { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Titres trouves.
|
/// Titres trouves.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<TitreStyleItem> Titres { get; set; } = new();
|
public List<TitreStyleItem> Titres { get; set; } = new ();
|
||||||
}
|
}
|
||||||
@@ -50,10 +50,10 @@ public class TitreContent
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit le nom de l'album associé au titre.
|
/// Définit le nom de l'album associé au titre.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Style> Styles { get; set; } = new();
|
public List<Style> Styles { get; set; } = new ();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit la liste des commentaires associés au titre.
|
/// Définit la liste des commentaires associés au titre.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<Commentaire> Commentaires { get; set; } = new();
|
public List<Commentaire> Commentaires { get; set; } = new ();
|
||||||
}
|
}
|
||||||
@@ -13,5 +13,5 @@ public class TitreStyle
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Définit la liste des items de titre associés au style musical.
|
/// Définit la liste des items de titre associés au style musical.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<TitreStyleItem> Titres { get; set; } = new();
|
public List<TitreStyleItem> Titres { get; set; } = new ();
|
||||||
}
|
}
|
||||||
@@ -55,14 +55,18 @@
|
|||||||
@titre.DateCreation
|
@titre.DateCreation
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex align-items-center text-muted small">
|
<div class="d-flex align-items-center text-muted small flex-wrap">
|
||||||
<i class="fa-solid fa-tags me-1"></i>
|
<i class="fa-solid fa-tags me-2"></i>
|
||||||
<a asp-controller="Titre"
|
|
||||||
asp-action="Style"
|
@foreach (var style in titre.Styles)
|
||||||
asp-route-id="Pop"
|
{
|
||||||
class="text-decoration-none">
|
<a asp-controller="Titre"
|
||||||
Pop
|
asp-action="Style"
|
||||||
</a>
|
asp-route-id="@style.Libelle"
|
||||||
|
class="text-decoration-none me-1">
|
||||||
|
@style.Libelle@(style != titre.Styles.Last() ? "," : "")
|
||||||
|
</a>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@* TODO : Modifier, il s'agit d'une liste *@
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@* <a class="nav-link" href="#">
|
@* <a class="nav-link" href="#">
|
||||||
<i class="fa-solid fa-screwdriver-wrench"></i> Administration
|
<i class="fa-solid fa-screwdriver-wrench"></i> Administration
|
||||||
|
|||||||
Reference in New Issue
Block a user