Aller au contenu principal

21-3 Modèle de requête et fonction creer() de IssueService

Modèle de requête​

Pour la création d'une issue, on aura besoin d'un modèle de requête afin de modéliser une requête de création.

  1. Créez une interface CreerIssueRequete:
ng g interface core/requetes/issue-creer-requete 
  1. Configurez les propriétés propres à une issue.
src/app/core/requetes/issue-creer-requete.ts
export interface IssueCreerRequete {
titre: string;
auteur: string;
contenu: string;
projet_id: number;
}
info

Remarquez la présence de projet_id! Il faut en effet identifier à quel projet l'issue est associée.

Modèle Issue​

Créez un modèle pour représenter une Issue.

  1. Créer le modèle

    ng g interface core/models/issue
  2. Mettez-y les champs propres à une issue Vous êtes capables de créer un modèle pour l'issue! :)

    Je vous donne le point de départ pour au moins inclure projet_id, le reste vous appartient!

    src/app/core/models/issue.ts
    export interface Issue {
    // Complétez avec les autres propriétés!
    projet_id: number;
    }

    Imgur

Fonction creer() de IssueService​

La fonction de création est une requête assez standard: on accepte en entrée CreerIssueRequete et on retourne la réponse, soit aussi une Issue.

  1. Créer un service pour les issues
    ng g service core/services/issue-service
  2. Ajouter la fonction de création
    src/app/core/services/issue-service.ts
    async creer(issue: IssueCreerRequete): Promise<Issue> {
    const url = "/issues";
    const config: AxiosRequestConfig = {
    headers: {
    'Accept': 'application/vnd.pgrst.object+json',
    'Prefer': 'return=representation'
    }
    }

    const reponse = await api.post<Issue>(url, issue, config)

    return reponse.data;
    }

Injecter le service dans le composant de modal​

Il est important de ne pas oublier l'injection du service dans le composant de modale afin d'exécuter l'appel d'API requis.

src/app/features/issues/components/issue-creer-modal.ts
constructor(public activeModal: NgbActiveModal,
private issueService: IssueService) {
}