Files
adastra_api/ARTICLE_METHODS.md
T

8.2 KiB

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"

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"

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

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

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

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

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 :

article.toJSONFor()                   // Retourne un objet JSON formaté
                                      // Format: { id, slug, title, description, body }

Hooks (Triggers)

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

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

const article = await Article.findByPk(1);
const comments = await article.getComments();

Obtenir les utilisateurs qui ont favorisé cet article

const article = await Article.findByPk(1);
const fans = await article.getArticleFavoriteUsers();

Créer un commentaire pour un article

const article = await Article.findByPk(1);
const comment = await article.createComment({
    body: "Great article!",
    authorId: userId
});

Compter les tags

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 articleTagsgetArticleTags(), addArticleTag(), etc.
    • Si alias est tagListsgetTagLists(), 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 :

    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 :

    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.