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",
|
||||
"settings": {
|
||||
"documentationRules": {
|
||||
"companyName": " Equipe 1 - ",
|
||||
"documentationCulture": "fr-FR"
|
||||
"documentInterfaces": false,
|
||||
"documentInternalElements": false,
|
||||
"documentExposedElements": false
|
||||
},
|
||||
"maintainabilityRules": {
|
||||
"settings": {
|
||||
"commonWords": [ "Obtient", "définit" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
/// <summary>
|
||||
/// Définit le contexte de la base de données.
|
||||
/// </summary>
|
||||
namespace Webzine.EntitiesContext
|
||||
{
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
using Webzine.Entity;
|
||||
|
||||
public class WebzineDbContext : DbContext
|
||||
@@ -14,25 +18,27 @@ namespace Webzine.EntitiesContext
|
||||
/// </summary>
|
||||
/// <param name="options">Options.</param>
|
||||
public WebzineDbContext(DbContextOptions<WebzineDbContext> options)
|
||||
: base(options) { }
|
||||
: base(options)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets Obtient les artistes de la base.
|
||||
/// Obtient ou définit les artistes de la base.
|
||||
/// </summary>
|
||||
public DbSet<Artiste> Artistes => this.Set<Artiste>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets Obtient les styles de la base.
|
||||
/// Obtient ou définit les styles de la base.
|
||||
/// </summary>
|
||||
public DbSet<Style> Styles => this.Set<Style>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets obtient les titres de la base.
|
||||
/// Obtient ou définit les titres de la base.
|
||||
/// </summary>
|
||||
public DbSet<Titre> Titres => this.Set<Titre>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets obtient les commentaires de la base.
|
||||
/// Obtient ou définit les commentaires de la base.
|
||||
/// </summary>
|
||||
public DbSet<Commentaire> Commentaires => this.Set<Commentaire>();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace Webzine.Entity.Tests
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
/// <summary>
|
||||
@@ -13,8 +14,8 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'entité possède bien la propriété passée en paramètre.
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type de l'entité</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
||||
/// <param name="typeObjet">type de l'entité.</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||
public static void HasProperty(Type typeObjet, string nomPropriete)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
@@ -24,9 +25,9 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue.
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type 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="typeObjet">type 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>
|
||||
public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
@@ -38,9 +39,9 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type de l'entité</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
||||
/// <param name="max">longueur maximum</param>
|
||||
/// <param name="typeObjet">type de l'entité.</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||
/// <param name="max">longueur maximum.</param>
|
||||
public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
@@ -52,9 +53,9 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type de l'entité</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
||||
/// <param name="min">longueur minimum</param>
|
||||
/// <param name="typeObjet">type de l'entité.</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||
/// <param name="min">longueur minimum.</param>
|
||||
public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
@@ -66,8 +67,8 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'attribut de l'entité a l'annotation [Required].
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type de l'entité</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
||||
/// <param name="typeObjet">type de l'entité.</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||
public static void AttributRequis(Type typeObjet, string nomPropriete)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
@@ -78,8 +79,8 @@ namespace Webzine.Entity.Tests
|
||||
/// <summary>
|
||||
/// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url].
|
||||
/// </summary>
|
||||
/// <param name="typeObjet">type de l'entité</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
|
||||
/// <param name="typeObjet">type de l'entité.</param>
|
||||
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
|
||||
public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete)
|
||||
{
|
||||
var property = typeObjet.GetProperty(nomPropriete);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Webzine.Entity
|
||||
namespace Webzine.Entity
|
||||
{
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Webzine.Entity
|
||||
namespace Webzine.Entity
|
||||
{
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
|
||||
@@ -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,18 +2,19 @@
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
namespace Webzine.Entity.Fixtures
|
||||
{
|
||||
using Bogus;
|
||||
public class SeedDataLocal
|
||||
{
|
||||
public SeedDataLocal()
|
||||
{
|
||||
namespace Webzine.Entity.Fixtures;
|
||||
|
||||
}
|
||||
using Bogus;
|
||||
|
||||
/// <summary>
|
||||
/// Generer une liste d'artiste.
|
||||
/// 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
|
||||
{
|
||||
/// <summary>
|
||||
/// Génére une liste d'artiste.
|
||||
/// </summary>
|
||||
/// <param name="nombre">Nombre d'artiste.</param>
|
||||
/// <returns>Liste d'artiste.</returns>
|
||||
@@ -29,20 +30,18 @@ namespace Webzine.Entity.Fixtures
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generer une liste de titres.
|
||||
/// 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>
|
||||
/// <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
|
||||
)
|
||||
List<string> albums)
|
||||
{
|
||||
Random random = new Random();
|
||||
int idStart = 1;
|
||||
@@ -79,7 +78,7 @@ namespace Webzine.Entity.Fixtures
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Générer une liste de styles pour seeder la base
|
||||
/// Génére 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>
|
||||
@@ -125,7 +124,7 @@ namespace Webzine.Entity.Fixtures
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Générer une liste de commentaires pour seeder la base
|
||||
/// Génére une liste de commentaires pour seeder la base
|
||||
/// de données.
|
||||
/// </summary>
|
||||
/// <param name="titre">Titre.</param>
|
||||
@@ -149,7 +148,7 @@ namespace Webzine.Entity.Fixtures
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Générer une liste d'albums pour seeder la base
|
||||
/// 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>
|
||||
@@ -168,4 +167,3 @@ namespace Webzine.Entity.Fixtures
|
||||
return albums.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,4 @@ namespace Webzine.Entity.Fixtures;
|
||||
|
||||
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>
|
||||
/// Classe représentant un style de musique.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Webzine.Entity
|
||||
namespace Webzine.Entity
|
||||
{
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
namespace Webzine.Repository.Contracts
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Webzine.Entity;
|
||||
|
||||
namespace Webzine.Repository.Contracts
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
public interface ICommentaireRepository
|
||||
{
|
||||
void Add(Commentaire commentaire);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Webzine.Entity;
|
||||
|
||||
namespace Webzine.Repository.Contracts
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
/// <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.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Webzine.Entity;
|
||||
|
||||
namespace Webzine.Repository.Contracts
|
||||
namespace Webzine.Repository.Contracts
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// Interface qui définit les opérations de base pour la gestion des titres dans une source de données.
|
||||
/// </summary>
|
||||
|
||||
@@ -5,8 +5,10 @@
|
||||
namespace Webzine.Repository
|
||||
{
|
||||
using System.Data.Common;
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using Webzine.EntitiesContext;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
@@ -17,7 +19,7 @@ namespace Webzine.Repository
|
||||
/// </summary>
|
||||
public class DbArtisteRepository : IArtisteRepository
|
||||
{
|
||||
private WebzineDbContext context;
|
||||
private readonly WebzineDbContext context;
|
||||
private readonly ILogger<LocalArtisteRepository> logger;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Webzine.EntitiesContext;
|
||||
namespace Webzine.Repository;
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using Webzine.EntitiesContext;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
namespace Webzine.Repository;
|
||||
|
||||
/// <summary>
|
||||
/// Classe qui implémente le repository pour les commentaires en utilisant une base de données.
|
||||
/// </summary>
|
||||
@@ -15,6 +16,7 @@ public class DbCommentaireRepository : ICommentaireRepository
|
||||
private readonly WebzineDbContext context;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DbCommentaireRepository"/> class.
|
||||
/// Initialisation de <see cref="DbCommentaireRepository"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Webzine.EntitiesContext;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Webzine.EntitiesContext;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Webzine.Entity;
|
||||
|
||||
namespace Webzine.Repository
|
||||
namespace Webzine.Repository
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
namespace Webzine.Repository
|
||||
{
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
@@ -15,10 +16,10 @@ namespace Webzine.Repository
|
||||
public class LocalArtisteRepository : IArtisteRepository
|
||||
{
|
||||
private readonly ILogger<LocalArtisteRepository> logger;
|
||||
|
||||
// private readonly List<Artiste> artistes;
|
||||
private readonly InMemoryDataStore dataStore;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
|
||||
/// Est liéee à une liste d'artistes en local et utilise un logger pour enregistrer les opérations effectuées sur les artistes.
|
||||
@@ -28,6 +29,7 @@ namespace Webzine.Repository
|
||||
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
|
||||
{
|
||||
this.logger = logger;
|
||||
|
||||
// this.artistes = artistes;
|
||||
this.dataStore = dataStore;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,9 @@ namespace Webzine.Repository
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
@@ -21,6 +23,7 @@ using Webzine.Repository.Contracts;
|
||||
private readonly InMemoryDataStore dataStore;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LocalCommentaireRepository"/> class.
|
||||
/// 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.
|
||||
/// </summary>
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace Webzine.Repository;
|
||||
public class LocalStyleRepository : IStyleRepository
|
||||
{
|
||||
private readonly ILogger<LocalStyleRepository> logger;
|
||||
|
||||
// private readonly List<Style> styles;
|
||||
private readonly InMemoryDataStore dataStore;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ public class ArtisteController : Controller
|
||||
private readonly IArtisteRepository artisteRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="ArtisteController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Logger.</param>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Webzine.Entity;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
{
|
||||
[Area("Administration")]
|
||||
public class CommentaireController : Controller
|
||||
{
|
||||
@@ -12,6 +12,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
private readonly ICommentaireRepository commentaireRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="CommentaireController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="CommentaireController"/>.
|
||||
/// Utilise l'injection de dépendances pour récupérer le repository.
|
||||
/// </summary>
|
||||
@@ -37,10 +38,10 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
// Initialisation du ViewModel
|
||||
var viewModel = new CommentaireViewModel
|
||||
{
|
||||
Commentaires = commentaires
|
||||
Commentaires = commentaires,
|
||||
};
|
||||
|
||||
return View(viewModel);
|
||||
return this.View(viewModel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -58,16 +59,16 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
Auteur = commentaire.Auteur,
|
||||
Contenu = commentaire.Contenu,
|
||||
DateCreation = commentaire.DateCreation,
|
||||
TitreLibelle = commentaire.Titre?.Libelle
|
||||
TitreLibelle = commentaire.Titre?.Libelle,
|
||||
};
|
||||
|
||||
return View(model);
|
||||
return this.View(model);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effectue la suppression réelle du commentaire.
|
||||
/// </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>
|
||||
[HttpPost]
|
||||
public IActionResult Delete(CommentaireDeleteViewModel model)
|
||||
@@ -79,7 +80,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
this.commentaireRepository.Delete(commentaire);
|
||||
}
|
||||
|
||||
return RedirectToAction("Index");
|
||||
return this.RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Entity.Fixtures;
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.Areas.Administration.ViewModels;
|
||||
|
||||
@@ -16,6 +14,7 @@ public class DashboardController : Controller
|
||||
private readonly ITitreRepository titreRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DashboardController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="DashboardController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecté.</param>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// Contrôleur pour la gestion des styles dans l'administration du webzine.
|
||||
/// </summary>
|
||||
@@ -14,6 +15,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
private readonly IStyleRepository styleRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="StyleController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="StyleController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecté.</param>
|
||||
@@ -93,7 +95,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
||||
[HttpGet]
|
||||
public IActionResult Edit(int id)
|
||||
{
|
||||
var style = styleRepository.Find(id);
|
||||
var style = this.styleRepository.Find(id);
|
||||
|
||||
var model = new StyleEditViewModel
|
||||
{
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Entity.Fixtures;
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
||||
|
||||
/// <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>
|
||||
[Area("Administration")]
|
||||
public class TitreController : Controller
|
||||
@@ -18,8 +17,8 @@ public class TitreController : Controller
|
||||
private readonly IArtisteRepository artisteRepository;
|
||||
private readonly IStyleRepository styleRepository;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecté.</param>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
{
|
||||
/// <summary>
|
||||
/// ViewModel pour la création et la modification d'un artiste dans l'administration.
|
||||
/// Ne contient pas les titres de l'artiste.
|
||||
/// </summary>
|
||||
public class AdminArtisteForm
|
||||
{
|
||||
@@ -9,10 +10,12 @@
|
||||
/// Définit l'identifiant de l'artiste.
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Définit le nom de l'artiste.
|
||||
/// </summary>
|
||||
public string Nom { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Définit la biographie de l'artiste.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// <copyright file="CommentaireViewModel.cs" company="Webzine">
|
||||
// Copyright (c) Webzine. All rights reserved.
|
||||
// <copyright file="CommentaireViewModel.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire
|
||||
|
||||
@@ -29,6 +29,7 @@ public class DashboardViewModel
|
||||
/// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine.
|
||||
/// </summary>
|
||||
public int IdMusiqueLaPlusJouee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Définit le nom de la biographie d'artiste la plus lue dans le webzine.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
||||
// Copyright (c) Webzine. Tout droit réservé.
|
||||
// <copyright file="StyleCreateViewModel.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||
{
|
||||
/// <summary>
|
||||
/// ViewModel pour la création d'un style en administration.
|
||||
/// </summary>
|
||||
|
||||
public class StyleCreateViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Obtient ou définit le libellé du style.
|
||||
/// </summary>
|
||||
|
||||
public string Libelle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,22 @@
|
||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
||||
// Copyright (c) Webzine. Tout droit réservé.
|
||||
// <copyright file="StyleDeleteViewModel.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||
{
|
||||
/// <summary>
|
||||
/// ViewModel pour la suppression d'un style en administration.
|
||||
/// </summary>
|
||||
|
||||
public class StyleDeleteViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Obtient ou définit l'identifiant du style à supprimer.
|
||||
/// </summary>
|
||||
|
||||
public int IdStyle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Obtient ou définit le libellé du style.
|
||||
/// </summary>
|
||||
|
||||
public string Libelle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,22 @@
|
||||
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
|
||||
// Copyright (c) Webzine. Tout droit réservé.
|
||||
// <copyright file="StyleEditViewModel.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
|
||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
|
||||
{
|
||||
/// <summary>
|
||||
/// ViewModel pour la modification d'un style en administration.
|
||||
/// </summary>
|
||||
|
||||
public class StyleEditViewModel
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Obtient ou définit le libellé du style.
|
||||
/// </summary>
|
||||
|
||||
public int IdStyle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Obtient ou définit le libellé du style.
|
||||
/// </summary>
|
||||
|
||||
public string Libelle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,7 @@
|
||||
// <copyright file="AccueilController.cs" company=" Equipe 1 - ">
|
||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.ViewModels.Accueil;
|
||||
|
||||
@@ -19,6 +16,7 @@ namespace Webzine.WebApplication.Controllers
|
||||
private readonly ITitreRepository titreRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="AccueilController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="AccueilController"/>.
|
||||
/// </summary>
|
||||
/// <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 nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
|
||||
|
||||
// var titres = FakeDataFactory.GetTitres();
|
||||
// var titres = this.titreRepository.FindTitres(derniereChronique, nbTopTitres);
|
||||
var titres = this.titreRepository.FindAll();
|
||||
|
||||
var vm = new AccueilIndexViewModel
|
||||
|
||||
@@ -7,6 +7,7 @@ public class ApiController : ControllerBase
|
||||
private readonly ILogger<ApiController> logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ApiController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="ApiController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||
@@ -25,7 +26,7 @@ public class ApiController : ControllerBase
|
||||
{
|
||||
this.logger.LogInformation("Get Version was called");
|
||||
|
||||
return Ok(new
|
||||
return this.Ok(new
|
||||
{
|
||||
nom = "webzine",
|
||||
version = "2.0",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Webzine.Entity.Fixtures;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.ViewModels.Artiste;
|
||||
|
||||
@@ -9,18 +9,20 @@
|
||||
{
|
||||
// Injection du logger via le constructeur
|
||||
private readonly ILogger<ArtisteController> logger;
|
||||
private readonly IArtisteRepository _artisteRepository;
|
||||
private readonly IArtisteRepository artisteRepository;
|
||||
|
||||
/// <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é.
|
||||
/// </summary>
|
||||
/// <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)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.logger.LogDebug("Initialisation du ArtisteController");
|
||||
this._artisteRepository = artisteRepository;
|
||||
this.artisteRepository = artisteRepository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -44,7 +46,7 @@
|
||||
.ToTitleCase(nom.Replace("-", " "));
|
||||
|
||||
// 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
|
||||
if (artiste == null)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
/// <summary>
|
||||
/// Controller pour la page contact.
|
||||
/// </summary>
|
||||
@@ -11,6 +11,7 @@ namespace Webzine.WebApplication.Controllers
|
||||
private readonly ILogger<ContactController> logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ContactController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="ContactController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// <copyright file="RechercheController.cs" company=" Equipe 1 - ">
|
||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
||||
// <copyright file="RechercheController.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.ViewModels.Recherche;
|
||||
using Webzine.WebApplication.ViewModels.Titre;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// <copyright file="TitreController.cs" company=" Equipe 1 - ">
|
||||
// Copyright (c) Equipe 1 - . All rights reserved.
|
||||
// <copyright file="TitreController.cs" company="PlaceholderCompany">
|
||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
||||
// </copyright>
|
||||
|
||||
namespace Webzine.WebApplication.Controllers
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Webzine.Entity;
|
||||
using Webzine.Repository.Contracts;
|
||||
using Webzine.WebApplication.ViewModels.Titre;
|
||||
@@ -21,6 +22,7 @@ namespace Webzine.WebApplication.Controllers
|
||||
private readonly ITitreRepository titreRepository;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
||||
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
|
||||
/// </summary>
|
||||
/// <param name="logger">Service de journalisation injecte.</param>
|
||||
|
||||
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 NLog;
|
||||
using NLog.Web;
|
||||
|
||||
using Webzine.EntitiesContext;
|
||||
using Webzine.Entity;
|
||||
using Webzine.Entity.Fixtures;
|
||||
using Webzine.Repository;
|
||||
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.
|
||||
var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
|
||||
@@ -18,6 +21,7 @@ try
|
||||
// Ajoute les services necessaires pour permettre l'utilisation des
|
||||
// controllers avec des vues.
|
||||
builder.Services.AddControllersWithViews()
|
||||
|
||||
// Ajoute la compilation des vues lors de l'execution de l'application.
|
||||
// Cela nous evite de recompiler l'application a chaque modification de vue.
|
||||
// Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
|
||||
@@ -42,6 +46,7 @@ try
|
||||
builder.Services.AddDbContext<WebzineDbContext>(options =>
|
||||
options.UseNpgsql(builder.Configuration.GetConnectionString("PostGreSQLConnection")));
|
||||
}
|
||||
|
||||
builder.Services.AddScoped<DbEntityRepository>();
|
||||
builder.Services.AddScoped<ITitreRepository, DbTitreRepository>();
|
||||
builder.Services.AddScoped<IStyleRepository, DbStyleRepository>();
|
||||
@@ -117,7 +122,7 @@ try
|
||||
|
||||
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.
|
||||
app.UseStaticFiles(new StaticFileOptions
|
||||
{
|
||||
@@ -131,16 +136,8 @@ try
|
||||
// Active le middleware permettant le routage des requetes entrantes.
|
||||
app.UseRouting();
|
||||
|
||||
// Ajoute une route pour les zones (Areas) comme Admin
|
||||
app.MapControllerRoute(
|
||||
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?}");
|
||||
// Appelle les routes définies dans le dossier Extensions.
|
||||
app.MapCustomRoutes();
|
||||
|
||||
app.Run();
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
namespace Webzine.WebApplication.ViewComponents
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Webzine.Repository.Contracts;
|
||||
|
||||
/// <summary>
|
||||
/// View component pour la sidebar, récupère les styles depuis le repository.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
namespace Webzine.WebApplication.ViewModels.Artiste
|
||||
{
|
||||
using Webzine.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// ViewModel pour afficher les informations d'un artiste et ses titres groupés par album.
|
||||
/// </summary>
|
||||
|
||||
@@ -55,14 +55,18 @@
|
||||
@titre.DateCreation
|
||||
</div>
|
||||
|
||||
<div class="d-flex align-items-center text-muted small">
|
||||
<i class="fa-solid fa-tags me-1"></i>
|
||||
<div class="d-flex align-items-center text-muted small flex-wrap">
|
||||
<i class="fa-solid fa-tags me-2"></i>
|
||||
|
||||
@foreach (var style in titre.Styles)
|
||||
{
|
||||
<a asp-controller="Titre"
|
||||
asp-action="Style"
|
||||
asp-route-id="Pop"
|
||||
class="text-decoration-none">
|
||||
Pop
|
||||
asp-route-id="@style.Libelle"
|
||||
class="text-decoration-none me-1">
|
||||
@style.Libelle@(style != titre.Styles.Last() ? "," : "")
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@* TODO : Modifier, il s'agit d'une liste *@
|
||||
<li class="nav-item">
|
||||
@* <a class="nav-link" href="#">
|
||||
<i class="fa-solid fa-screwdriver-wrench"></i> Administration
|
||||
|
||||
Reference in New Issue
Block a user