Commit 5d61833f authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Base du bundle

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+12 −0
Changes for .gitignore: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
#
.idea
.vscode
.env
vendor
api/vendor
node_modules
frontend/node_modules
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###
 No newline at end of file

.gitlab-ci.yml

0 → 100644
+46 −0
Changes for .gitlab-ci.yml: 46 added lines, 0 removed lines.
Original line number Diff line number Diff line
image: node:22.14

stages:
  - build
  - publish

variables:
  PHP_DIR: api
  JS_DIR: frontend

default:
  artifacts:
    paths:
      - frontend/dist

build_js:
  stage: build
  script:
    - cd $JS_DIR
    - npm ci
    - npm run build
  rules:
    - exists:
        - frontend/package.json
  needs: []

# Publier sur le packagist
publish_php:
  stage: publish
  image: alpine/curl
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - curl https://gest.unicaen.fr/packagist/update

# Publier sur GitLab Registry
publish_js:
  stage: publish
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - cd $JS_DIR
    - npm ci
    - echo "@unicaen:registry=https://git.unicaen.fr/api/v4/projects/3657/packages/npm/" > .npmrc
    - echo "//git.unicaen.fr/api/v4/projects/3657/packages/npm/:_authToken=$NPM_DEPLOY_TOKEN" >> .npmrc
    - npm publish --access public
 No newline at end of file

README.md

0 → 100644
+109 −0
Changes for README.md: 109 added lines, 0 removed lines.
Original line number Diff line number Diff line
# [WIP] Ce dépôt est pour l'instant à but de test uniquement

# Unicaen Utilisateur

Ce dépôt est un monorepo contenant :

- Un bundle **API Platform** pour la gestion des paramètres.
- Un composant **Vue.js** associé pour l'interface utilisateur.

## Structure du projet

```
/api       # Code source du bundle API Platform
/frontend  # Code source du composant Vue.js
```

## Prérequis

- **PHP** >= 8.2
- **Composer**
- **Node.js** >= 16
- **Yarn** ou **npm**

## Usage

Générer les routes en BDD : 
```bash
php bin/console unicaen:utilisateur:sync-routes
```

Fixtures pour les utilisateurs : 
```bash
php bin/console unicaen:utilisateur:fixtures
```

## Installation

### API

1. Composer install
    ```bash
    composer install unicaen-modern/utilisateur
    ```

### Frontend

1. Ajouter le .npmrc à côté de votre package.json pur référencer le registry de l'Université de Caen :
    ```bash
    echo "@unicaen:registry=https://git.unicaen.fr/api/v4/groups/6549/-/packages/npm/" > .npmrc
    ```

2. Installer le package
    ```bash
    npm install @unicaen/utilisateur
    ```

3. Importer et déclarer le composant dans votre projet Vue.js, généralement main.js :
    ```javascript
   import { UtilisateurPlugin } from '@unicaen/utilisateur'
   
   // Create app etc...
   
   app.use(UtilisateurPlugin, { axios: axiosInstance})
   ```
   Vous devez passer votre instance axios à l'option `axios` pour que le composant puisse communiquer avec l'API en utilisant votre système d'authentification.


4. La bibliothèque fournit aussi un object router UtilisateurRouter qui intégre directement le routing vers /utilisateur. Vous pouvez l'importer et l'utiliser comme suit :
    ```javascript
    import { UtilisateurRouter } from '@unicaen/utilisateur'
    
    // Create app etc...
    const router = createRouter({
        history: createWebHistory(),
        routes: [...UtilisateurRouter]
    })
    app.use(router)
    ```
   
5. Ou gérer vous même l'utilisation du composant UtilisateurPage pour l'intégrer comme vous le souhaitez dans votre projet.
    ```javascript
    import { UtilisateurPage } from '@unicaen/utilisateur'
    
    // Create app etc...
    
    app.component('UtilisateurPage', UtilisateurPage)
    ```
    ```javascript
    import { createRouter, createWebHistory } from 'vue-router'
    import { UtilisateurPage } from '@unicaen/utilisateur'
   
   const router = createRouter({
      history: createWebHistory(),
      routes: {
           path: '/utilisateur',
           component: UtilisateurPage
      }
   })
   // Create app etc...
   app.use(router)
     ```

## Contribution

Les contributions sont les bienvenues. Merci de suivre les bonnes pratiques de développement et de soumettre vos pull requests.

## Licence

Ce projet est sous licence MIT.
 No newline at end of file
+1 −0
Changes for api/.php-cs-fixer.cache: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
{"php":"8.2.28","version":"3.75.0:v3.75.0#399a128ff2fdaf4281e4e79b755693286cdf325c","indent":"    ","lineEnding":"\n","rules":{"align_multiline_comment":true,"backtick_to_shell_exec":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["return"]},"braces_position":{"allow_single_line_anonymous_functions":true,"allow_single_line_empty_anonymous_classes":true},"class_attributes_separation":{"elements":{"method":"one"}},"class_definition":{"single_line":true},"class_reference_name_casing":true,"clean_namespace":true,"concat_space":true,"declare_parentheses":true,"echo_tag_syntax":true,"empty_loop_body":{"style":"braces"},"empty_loop_condition":true,"fully_qualified_strict_types":true,"function_declaration":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"global_namespace_import":{"import_classes":false,"import_constants":false,"import_functions":false},"include":true,"increment_style":true,"integer_literal_case":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":{"on_multiline":"ignore"},"native_function_casing":true,"native_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["attribute","case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_null_property_initialization":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"allow_hidden_params":true,"remove_inheritdoc":true},"no_trailing_comma_in_singleline":true,"no_unneeded_braces":{"namespaces":true},"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","others","return","switch_case","yield","yield_from"]},"no_unneeded_import_alias":true,"no_unset_cast":true,"no_unused_imports":true,"no_useless_concat_operator":true,"no_useless_nullsafe_operator":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"nullable_type_declaration":true,"nullable_type_declaration_for_default_null_value":true,"object_operator_without_whitespace":true,"operator_linebreak":{"only_booleans":true},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"alpha"},"ordered_types":{"null_adjustment":"always_last","sort_algorithm":"none"},"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":true,"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":{"order":["param","return","throws"]},"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":{"groups":[["Annotation","NamedArgumentConstructor","Target"],["author","copyright","license"],["category","package","subpackage"],["property","property-read","property-write"],["deprecated","link","see","since"]]},"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"semicolon_after_instruction":true,"simple_to_complex_string_variable":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_comment_spacing":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_around_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"statement_indentation":{"stick_comment_to_next_continuous_control_statement":true},"switch_continue_to_break":true,"trailing_comma_in_multiline":{"after_heredoc":true,"elements":["array_destructuring","arrays","match","parameters"]},"trim_array_spaces":true,"type_declaration_spaces":true,"types_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true,"array_indentation":true,"array_syntax":true,"cast_spaces":true,"new_with_parentheses":{"anonymous_class":false},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_line_after_imports":true,"spaces_inside_parentheses":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/Attribute\/Privilege.php":"491945f1742859f673695e0c0d182a9f","src\/UnicaenPrivilegeBundle.php":"a7bb3c707fa1fecaf66892800711069d","src\/Security\/PrivilegeChecker.php":"9e9fda5684ff3cab91bf1626cfee159b","src\/Model\/UserWithRoleInterface.php":"a13496f1fc325313469c64558d84c020","src\/Controller\/ApiRoutesController.php":"390ceb5b3b2843c2e1e462bc193c3035","src\/Security\/PrivilegeVoter.php":"438464e634e3b149038e0ff56a6bce71","src\/Entity\/PrivilegeRoute.php":"b187e87068d50041db9607c30aeec5eb","src\/Model\/UnicaenUser.php":"7579d48a2019181488c131778fcc8cb1","src\/Service\/PrivilegeChecker.php":"53bf7b3b7f522d64f79353c9a2616bf4","src\/Entity\/PrivilegeCategorie.php":"f2836b96b7992dfa38bdeaffe1401bf4","src\/Entity\/Role.php":"57b7dbea1df80433ba5f7dada28f1302","src\/Entity\/Privilege.php":"dc5e10d8c14d45767aebb11c0536d448","src\/DependencyInjection\/Configuration.php":"0ded029b41bd680775f61409beeed20b","src\/DependencyInjection\/UnicaenPrivilegeExtension.php":"e4ff95ef2dec9df347407ce3b38f8807","src\/State\/ApiRouteStateProvider.php":"afb13af6998a95ebae9adcd61f33940c","src\/Command\/SyncApiRoutesCommand.php":"768adca124916880fd40ae6d991ca422","src\/Entity\/ApiRouteResource.php":"56ab4d69fdc77862b4673565dc766c42","src\/Service\/ApiRouteLister.php":"1c281b03bcb713af1aa8b50c38dfe06f"}}
 No newline at end of file
+14 −0
Changes for api/.php-cs-fixer.dist.php: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

$finder = (new PhpCsFixer\Finder())
    ->in(__DIR__. '/src')
    ->exclude('var')
    ->exclude('vendor'); 
;

return (new PhpCsFixer\Config())
    ->setRules([
        '@Symfony' => true,
    ])
    ->setFinder($finder)
;
Loading