211 lines
8.2 KiB
Markdown
211 lines
8.2 KiB
Markdown
# 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.
|