fix(user): persist updateUser correctly; add setup:api script and README update; seeders tweaks
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
# Méthodes disponibles sur l'objet `Article` (Sequelize)
|
||||
|
||||
Ce document liste toutes les méthodes automatiquement générées par Sequelize pour le modèle `Article` en fonction des associations définies dans `src/database/relationships/index.js`.
|
||||
|
||||
---
|
||||
|
||||
## Associations Many-to-Many (belongsToMany)
|
||||
|
||||
### 1. **Tags** via `TagList`
|
||||
Association alias: `articleTags`
|
||||
Clés: `foreignKey: "articleId"`, `otherKey: "tagName"`
|
||||
|
||||
```javascript
|
||||
article.getArticleTags() // Récupère tous les tags
|
||||
article.setArticleTags([...]) // Définit les tags
|
||||
article.addArticleTag(tag) // Ajoute un tag
|
||||
article.addArticleTags([...]) // Ajoute plusieurs tags
|
||||
article.removeArticleTag(tag) // Retire un tag
|
||||
article.removeArticleTags([...]) // Retire plusieurs tags
|
||||
article.countArticleTags() // Compte les tags
|
||||
article.hasArticleTag(tag) // Vérifie si le tag est lié
|
||||
article.hasArticleTags([...]) // Vérifie si les tags sont liés
|
||||
|
||||
// Alias généré par Sequelize (correspond à belongsToMany):
|
||||
// Nom de la clé étrangère singularisée + pluralisé = "ArticleTag(s)" => "addTagList", "getTagList", etc.
|
||||
article.addTagList(tag) // Ajoute un tag via l'alias
|
||||
article.addTagLists([...]) // Ajoute plusieurs tags via l'alias
|
||||
article.getTagLists() // Récupère les tags via l'alias
|
||||
article.setTagLists([...]) // Définit les tags via l'alias
|
||||
article.removeTagList(tag) // Retire un tag via l'alias
|
||||
article.removeTagLists([...]) // Retire plusieurs tags via l'alias
|
||||
article.countTagLists() // Compte les tags via l'alias
|
||||
article.hasTagList(tag) // Vérifie si le tag est lié via l'alias
|
||||
article.hasTagLists([...]) // Vérifie si les tags sont liés via l'alias
|
||||
```
|
||||
|
||||
### 2. **Users (Favoris)** via `Favorite`
|
||||
Association alias: `articleFavoriteUsers`
|
||||
Clés: `foreignKey: "articleId"`, `otherKey: "userId"`
|
||||
|
||||
```javascript
|
||||
article.getArticleFavoriteUsers() // Récupère les utilisateurs qui ont favorisé
|
||||
article.setArticleFavoriteUsers([...]) // Définit les utilisateurs
|
||||
article.addUserIdUser(user) // Ajoute un utilisateur
|
||||
article.addArticleFavoriteUsers([...]) // Ajoute plusieurs utilisateurs
|
||||
article.removeUserIdUser(user) // Retire un utilisateur
|
||||
article.removeArticleFavoriteUsers([...]) // Retire plusieurs utilisateurs
|
||||
article.countArticleFavoriteUsers() // Compte les utilisateurs
|
||||
article.hasUserIdUser(user) // Vérifie si l'utilisateur a favorisé
|
||||
article.hasArticleFavoriteUsers([...]) // Vérifie si les utilisateurs ont favorisé
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Associations One-to-Many (hasMany)
|
||||
|
||||
### 3. **Comments**
|
||||
Association alias: `comments`
|
||||
Clé étrangère: `articleId`
|
||||
|
||||
```javascript
|
||||
article.getComments() // Récupère tous les commentaires
|
||||
article.setComments([...]) // Définit les commentaires
|
||||
article.addComment(comment) // Crée/ajoute un commentaire
|
||||
article.addComments([...]) // Ajoute plusieurs commentaires
|
||||
article.removeComment(comment) // Retire un commentaire
|
||||
article.removeComments([...]) // Retire plusieurs commentaires
|
||||
article.countComments() // Compte les commentaires
|
||||
article.hasComment(comment) // Vérifie si le commentaire existe
|
||||
article.hasComments([...]) // Vérifie si les commentaires existent
|
||||
article.createComment({...}) // Crée un nouveau commentaire
|
||||
```
|
||||
|
||||
### 4. **Favorites** (enregistrements de join)
|
||||
Association alias: `favorites`
|
||||
Clé étrangère: `articleId`
|
||||
|
||||
```javascript
|
||||
article.getFavorites() // Récupère les enregistrements Favorite
|
||||
article.setFavorites([...]) // Définit les favoris
|
||||
article.addFavorite(favorite) // Ajoute un enregistrement Favorite
|
||||
article.addFavorites([...]) // Ajoute plusieurs enregistrements
|
||||
article.removeFavorite(favorite) // Retire un enregistrement Favorite
|
||||
article.removeFavorites([...]) // Retire plusieurs enregistrements
|
||||
article.countFavorites() // Compte les enregistrements Favorite
|
||||
article.hasFavorite(favorite) // Vérifie si le Favorite existe
|
||||
article.hasFavorites([...]) // Vérifie si les Favorites existent
|
||||
article.createFavorite({...}) // Crée un nouveau Favorite
|
||||
```
|
||||
|
||||
### 5. **TagLists** (enregistrements de join)
|
||||
Association alias: `tagLists`
|
||||
Clé étrangère: `articleId`
|
||||
|
||||
```javascript
|
||||
article.getTagLists() // Récupère les enregistrements TagList
|
||||
article.setTagLists([...]) // Définit les TagList
|
||||
article.addTagList(tagList) // Ajoute un enregistrement TagList
|
||||
article.addTagLists([...]) // Ajoute plusieurs enregistrements
|
||||
article.removeTagList(tagList) // Retire un enregistrement TagList
|
||||
article.removeTagLists([...]) // Retire plusieurs enregistrements
|
||||
article.countTagLists() // Compte les enregistrements TagList
|
||||
article.hasTagList(tagList) // Vérifie si le TagList existe
|
||||
article.hasTagLists([...]) // Vérifie si les TagLists existent
|
||||
article.createTagList({...}) // Crée un nouveau TagList
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Associations Belongs-To (hasOne inverse)
|
||||
|
||||
### 6. **Author (User)**
|
||||
Association alias: `author`
|
||||
Clé étrangère: `authorId`
|
||||
|
||||
```javascript
|
||||
article.getAuthor() // Récupère l'auteur
|
||||
article.setAuthor(user) // Définit l'auteur
|
||||
article.createAuthor({...}) // Crée un nouvel auteur
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Méthodes personnalisées du modèle
|
||||
|
||||
### Méthodes d'instance définies dans `Article.js` :
|
||||
|
||||
```javascript
|
||||
article.toJSONFor() // Retourne un objet JSON formaté
|
||||
// Format: { id, slug, title, description, body }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Hooks (Triggers)
|
||||
|
||||
```javascript
|
||||
Article.beforeValidate() // Déclenché avant la validation
|
||||
// Génère automatiquement un slug basé sur le titre
|
||||
// Format: slug(`${article.title}`) + '-' + random
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Exemples d'utilisation concrets
|
||||
|
||||
### Ajouter des tags à un article
|
||||
```javascript
|
||||
const article = await Article.findByPk(1);
|
||||
const tag = await Tag.findByPk('javascript');
|
||||
await article.addTagList(tag); // Via alias
|
||||
// ou
|
||||
await article.addArticleTag(tag); // Via alias généré automatiquement
|
||||
```
|
||||
|
||||
### Récupérer les commentaires d'un article
|
||||
```javascript
|
||||
const article = await Article.findByPk(1);
|
||||
const comments = await article.getComments();
|
||||
```
|
||||
|
||||
### Obtenir les utilisateurs qui ont favorisé cet article
|
||||
```javascript
|
||||
const article = await Article.findByPk(1);
|
||||
const fans = await article.getArticleFavoriteUsers();
|
||||
```
|
||||
|
||||
### Créer un commentaire pour un article
|
||||
```javascript
|
||||
const article = await Article.findByPk(1);
|
||||
const comment = await article.createComment({
|
||||
body: "Great article!",
|
||||
authorId: userId
|
||||
});
|
||||
```
|
||||
|
||||
### Compter les tags
|
||||
```javascript
|
||||
const article = await Article.findByPk(1);
|
||||
const tagCount = await article.countTagLists();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes importantes
|
||||
|
||||
1. **Noms des méthodes générées** : Sequelize génère les noms en fonction du nom de l'association (alias) ou du modèle.
|
||||
- Si alias est `articleTags` → `getArticleTags()`, `addArticleTag()`, etc.
|
||||
- Si alias est `tagLists` → `getTagLists()`, `addTagList()`, etc.
|
||||
|
||||
2. **Singulier/Pluriel** : Les méthodes `add*` acceptent soit un seul élément (singulier) soit un tableau (pluriel).
|
||||
|
||||
3. **Paramètres optionnels** : La plupart des méthodes `get*` acceptent un paramètre `options` pour personnaliser la requête :
|
||||
```javascript
|
||||
article.getComments({
|
||||
where: { createdAt: { [Op.gte]: someDate } },
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
order: [['createdAt', 'DESC']]
|
||||
});
|
||||
```
|
||||
|
||||
4. **Transactions** : Toutes les opérations CRUD peuvent être encapsulées dans une transaction :
|
||||
```javascript
|
||||
const transaction = await sequelize.transaction();
|
||||
await article.addTagList(tag, { transaction });
|
||||
await transaction.commit();
|
||||
```
|
||||
|
||||
5. **Alias vs Nom généré** : L'alias défini dans la relation détermine le nom des méthodes générées. Dans ce projet, les alias comme `articleTags`, `tagLists` permettent d'appeler `getTagLists()`, `addTagList()`, etc.
|
||||
Reference in New Issue
Block a user