@communecter/cocolight-api-client 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,168 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ import { ApiResponseError } from "../error.js";
3
+
4
+ // NewsMixin.js
5
+ export const NewsMixin = {
6
+
7
+ /**
8
+ * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
9
+ * Constant : GET_NEWS
10
+ * @param {Object} data - Les données à envoyer.
11
+ * @param {number} data.dateLimit - Limite de date timestamp ou 0 (default: 0)
12
+ * @param {object} data.search - data.search
13
+ * @param {string} data.search.name - Nom ou terme recherché (default: "")
14
+ * @param {number} data.indexStep - Nombre de résultats par page (default: 12)
15
+ * @param {Object} data.pathParams - Les paramètres de chemin.
16
+ * @param {boolean} data.pathParams.isLive - Indique si l'actualité est en direct (default: true)
17
+ * @param {string} data.pathParams.type - Type d'actualité (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
18
+ * @param {string} data.pathParams.id - ID de l'élément (ex: ID d'un utilisateur, d'un projet ou d'une organisation)
19
+ * @returns {Promise<Object>} - Les données de réponse.
20
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
21
+ * @throws {Error} - En cas d'erreur inattendue.
22
+ */
23
+ async _getNews(data = {}) {
24
+ return this.call("GET_NEWS", data);
25
+ },
26
+
27
+ /**
28
+ * Récupérer des actualités par IDs : Récupère des actualités à partir d’une liste d’identifiants.
29
+ * Constant : GET_NEWS_BY_ID
30
+ * @param {Object} data - Les données à envoyer.
31
+ * @param {Array<string>} data.ids - Liste des IDs d’actualités à récupérer
32
+ * @returns {Promise<Object>} - Les données de réponse.
33
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
34
+ * @throws {Error} - En cas d'erreur inattendue.
35
+ */
36
+ async _getNewsById(data = {}) {
37
+ return this.call("GET_NEWS_BY_ID", data);
38
+ },
39
+
40
+ /**
41
+ * Ajouter une actualité : Ajoute une nouvelle actualité.
42
+ * Constant : ADD_NEWS
43
+ * @param {Object} data - Les données à envoyer.
44
+ * @param {string} data.text - Contenu de l’actualité
45
+ * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
46
+ * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
47
+ * @param {string} data.parentId - ID de l'entité parente
48
+ * @param {string} data.parentType - Type de l'entité parente (default: "citoyens")
49
+ * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
50
+ * @param {boolean} data.json - Indique que la réponse est au format JSON. (default: true)
51
+ * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
52
+ * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
53
+ * @param {number} data.mediaImg.countImages - Nombre d'images.
54
+ * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
55
+ * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
56
+ * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
57
+ * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
58
+ * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
59
+ * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
60
+ * @returns {Promise<Object>} - Les données de réponse.
61
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
62
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
63
+ * @throws {Error} - En cas d'erreur inattendue.
64
+ */
65
+ async _addNews(data = {}) {
66
+ return this.callIsConnected("ADD_NEWS", data);
67
+ },
68
+
69
+ /**
70
+ * Ajouter une image à une actualité : Ajoute une images à une actualité.
71
+ * Constant : ADD_IMAGE_NEWS
72
+ * @param {Object} data - Les données à envoyer.
73
+ * @param {undefined} data.newsImage - Fichier image à télécharger
74
+ * @param {Object} data.pathParams - Les paramètres de chemin.
75
+ * @param {string} data.pathParams.folder - Type de l'entité parente (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
76
+ * @param {string} data.pathParams.ownerId - ID de l'utilisateur ou de l'entité parente
77
+ * @returns {Promise<Object>} - Les données de réponse.
78
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
79
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
80
+ * @throws {Error} - En cas d'erreur inattendue.
81
+ */
82
+ async _addImageNews(data = {}) {
83
+ return this.callIsConnected("ADD_IMAGE_NEWS", data);
84
+ },
85
+
86
+ /**
87
+ * Ajouter un fichier à une actualité : Ajoute un fichier à une actualité.
88
+ * Constant : ADD_FILE_NEWS
89
+ * @param {Object} data - Les données à envoyer.
90
+ * @param {undefined} data.newsFile - Fichier image à télécharger
91
+ * @param {Object} data.pathParams - Les paramètres de chemin.
92
+ * @param {string} data.pathParams.folder - Type de l'entité parente (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
93
+ * @param {string} data.pathParams.ownerId - ID de l'utilisateur ou de l'entité parente
94
+ * @returns {Promise<Object>} - Les données de réponse.
95
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
96
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
97
+ * @throws {Error} - En cas d'erreur inattendue.
98
+ */
99
+ async _addFileNews(data = {}) {
100
+ return this.callIsConnected("ADD_FILE_NEWS", data);
101
+ },
102
+
103
+ /**
104
+ * Supprimer une actualité : Supprime une actualité existante.
105
+ * Constant : DELETE_NEWS
106
+ * @param {Object} data - Les données à envoyer.
107
+ * @param {boolean} data.isLive - data.isLive (default: false)
108
+ * @param {Object} data.pathParams - Les paramètres de chemin.
109
+ * @param {string} data.pathParams.id - ID de l'actualité à supprimer
110
+ * @returns {Promise<Object>} - Les données de réponse.
111
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
112
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
113
+ * @throws {Error} - En cas d'erreur inattendue.
114
+ */
115
+ async _deleteNews(data = {}) {
116
+ return this.callIsConnected("DELETE_NEWS", data);
117
+ },
118
+
119
+ /**
120
+ * Mettre à jour une actualité : Met à jour le contenu d’une actualité existante.
121
+ * Constant : UPDATE_NEWS
122
+ * @param {Object} data - Les données à envoyer.
123
+ * @param {string} data.idNews - ID de l'actualité à mettre à jour
124
+ * @param {string} data.text - Contenu de l’actualité
125
+ * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
126
+ * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
127
+ * @param {string} data.parentId - ID de l'entité parente
128
+ * @param {string} data.parentType - Type de l'entité parente (default: "citoyens")
129
+ * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
130
+ * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
131
+ * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
132
+ * @param {number} data.mediaImg.countImages - Nombre d'images.
133
+ * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
134
+ * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
135
+ * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
136
+ * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
137
+ * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
138
+ * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
139
+ * @returns {Promise<Object>} - Les données de réponse.
140
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
141
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
142
+ * @throws {Error} - En cas d'erreur inattendue.
143
+ */
144
+ async _updateNews(data = {}) {
145
+ return this.callIsConnected("UPDATE_NEWS", data);
146
+ },
147
+
148
+ /**
149
+ * Partager une actualité : Partage une actualité avec une entité ou un utilisateur.
150
+ * Constant : SHARE_NEWS
151
+ * @param {Object} data - Les données à envoyer.
152
+ * @param {string} data.parentId - ID de l'actualité à partager
153
+ * @param {string} data.parentType - Type de l'objet, toujours 'news'. (default: "news")
154
+ * @param {string} data.childId - ID de l'entité partageante
155
+ * @param {string} data.childType - Type de l'entité partageante (default: "citoyens")
156
+ * @param {string} data.connectType - Type de connexion, toujours 'share'. (default: "share")
157
+ * @param {string} data.comment - Commentaire de partage
158
+ * @returns {Promise<Object>} - Les données de réponse.
159
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
160
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
161
+ * @throws {Error} - En cas d'erreur inattendue.
162
+ */
163
+ async _shareNews(data = {}) {
164
+ return this.callIsConnected("SHARE_NEWS", data);
165
+ }
166
+
167
+ };
168
+
@@ -0,0 +1,131 @@
1
+ import { EntityMixin } from "./EntityMixin.js";
2
+ import { NewsMixin } from "./NewsMixin.js";
3
+ import { UtilMixin } from "./UtilMixin.js";
4
+
5
+ // Organization.js
6
+ export class Organization {
7
+ // Champs privés pour protéger l'état
8
+ #id;
9
+ #slug;
10
+ #data = null;
11
+
12
+ /**
13
+ * Crée une instance de Organization.
14
+ * @param {ApiClient} apiClient - L'instance d'ApiClient.
15
+ * @param {Object} identifier - Objet contenant { id } ou { slug }.
16
+ */
17
+
18
+ constructor(apiClient, { id, slug } = {}) {
19
+ if (!id && !slug) {
20
+ throw new Error("Vous devez fournir un id ou un slug pour créer un User.");
21
+ }
22
+ this.apiClient = apiClient;
23
+ this.#id = id || null;
24
+ this.#slug = slug || null;
25
+ }
26
+
27
+ // Getters en lecture seule pour chaque propriété
28
+ get id() {
29
+ return this.#id;
30
+ }
31
+
32
+ _id(newId) {
33
+ this.#id = newId;
34
+ }
35
+
36
+ get slug() {
37
+ return this.#slug;
38
+ }
39
+
40
+ _slug(newSlug) {
41
+ this.#slug = newSlug;
42
+ }
43
+
44
+ get isConnected() {
45
+ return this.apiClient.isConnected;
46
+ }
47
+
48
+ get data() {
49
+ return this.#data;
50
+ }
51
+
52
+ _setData(newData) {
53
+ this.#data = newData;
54
+ }
55
+
56
+ get userId() {
57
+ return this.apiClient.userId;
58
+ }
59
+
60
+ get isMe() {
61
+ return this.isConnected && this.userId === this.id;
62
+ }
63
+
64
+ getEntityType() {
65
+ return "organizations";
66
+ }
67
+
68
+ /**
69
+ * Récupère le profil complet de l'organisation.
70
+ *
71
+ * @returns {Promise<Object>} Le profil complet.
72
+ */
73
+ async getProfil() {
74
+ return this.apiClient.safeCall(async () => {
75
+ const data = await this.getPublicProfile();
76
+ this._setData(data);
77
+ return data;
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
83
+ * Constant : GET_NEWS
84
+ * @param {Object} data - Les données à envoyer.
85
+ * @param {number} data.dateLimit - Limite de date timestamp ou 0 (default: 0)
86
+ * @param {object} data.search - data.search
87
+ * @param {string} data.search.name - Nom ou terme recherché (default: "")
88
+ * @param {number} data.indexStep - Nombre de résultats par page (default: 12)
89
+ * @returns {Promise<Object>} - Les données de réponse.
90
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
91
+ * @throws {Error} - En cas d'erreur inattendue.
92
+ */
93
+ async getNews(data = {}) {
94
+ data.pathParams = { type: this.getEntityType(), id: this.id };
95
+ return this._getNews(data);
96
+ }
97
+
98
+ /**
99
+ * Ajouter une actualité : Ajoute une nouvelle actualité.
100
+ * Constant : ADD_NEWS
101
+ * @param {Object} data - Les données à envoyer.
102
+ * @param {string} data.text - Contenu de l’actualité
103
+ * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
104
+ * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
105
+ * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
106
+ * @param {boolean} data.json - Indique que la réponse est au format JSON. (default: true)
107
+ * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
108
+ * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
109
+ * @param {number} data.mediaImg.countImages - Nombre d'images.
110
+ * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
111
+ * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
112
+ * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
113
+ * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
114
+ * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
115
+ * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
116
+ * @returns {Promise<Object>} - Les données de réponse.
117
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
118
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
119
+ * @throws {Error} - En cas d'erreur inattendue.
120
+ */
121
+ async addNews(data = {}) {
122
+ data.parentId = this.id;
123
+ data.parentType = this.getEntityType();
124
+ return this.callIsConnected(() => this._addNews(data));
125
+ }
126
+
127
+ }
128
+
129
+ // Incorporation du mixin dans Organization
130
+ Object.assign(Organization.prototype, EntityMixin, UtilMixin, NewsMixin);
131
+
@@ -0,0 +1,131 @@
1
+ import { EntityMixin } from "./EntityMixin.js";
2
+ import { NewsMixin } from "./NewsMixin.js";
3
+ import { UtilMixin } from "./UtilMixin.js";
4
+
5
+ // Project.js
6
+ export class Project {
7
+ // Champs privés pour protéger l'état
8
+ #id;
9
+ #slug;
10
+ #data = null;
11
+
12
+ /**
13
+ * Crée une instance de Project.
14
+ * @param {ApiClient} apiClient - L'instance d'ApiClient.
15
+ * @param {Object} identifier - Objet contenant { id } ou { slug }.
16
+ */
17
+
18
+ constructor(apiClient, { id, slug } = {}) {
19
+ if (!id && !slug) {
20
+ throw new Error("Vous devez fournir un id ou un slug pour créer un User.");
21
+ }
22
+ this.apiClient = apiClient;
23
+ this.#id = id || null;
24
+ this.#slug = slug || null;
25
+ }
26
+
27
+ // Getters en lecture seule pour chaque propriété
28
+ get id() {
29
+ return this.#id;
30
+ }
31
+
32
+ _id(newId) {
33
+ this.#id = newId;
34
+ }
35
+
36
+ get slug() {
37
+ return this.#slug;
38
+ }
39
+
40
+ _slug(newSlug) {
41
+ this.#slug = newSlug;
42
+ }
43
+
44
+ get isConnected() {
45
+ return this.apiClient.isConnected;
46
+ }
47
+
48
+ get data() {
49
+ return this.#data;
50
+ }
51
+
52
+ _setData(newData) {
53
+ this.#data = newData;
54
+ }
55
+
56
+ get userId() {
57
+ return this.apiClient.userId;
58
+ }
59
+
60
+ get isMe() {
61
+ return this.isConnected && this.userId === this.id;
62
+ }
63
+
64
+ getEntityType() {
65
+ return "projects";
66
+ }
67
+
68
+ /**
69
+ * Récupère le profil complet de l'organisation.
70
+ *
71
+ * @returns {Promise<Object>} Le profil complet.
72
+ */
73
+ async getProfil() {
74
+ return this.apiClient.safeCall(async () => {
75
+ const data = await this.getPublicProfile();
76
+ this._setData(data);
77
+ return data;
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
83
+ * Constant : GET_NEWS
84
+ * @param {Object} data - Les données à envoyer.
85
+ * @param {number} data.dateLimit - Limite de date timestamp ou 0 (default: 0)
86
+ * @param {object} data.search - data.search
87
+ * @param {string} data.search.name - Nom ou terme recherché (default: "")
88
+ * @param {number} data.indexStep - Nombre de résultats par page (default: 12)
89
+ * @returns {Promise<Object>} - Les données de réponse.
90
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
91
+ * @throws {Error} - En cas d'erreur inattendue.
92
+ */
93
+ async getNews(data = {}) {
94
+ data.pathParams = { type: this.getEntityType(), id: this.id };
95
+ return this._getNews(data);
96
+ }
97
+
98
+ /**
99
+ * Ajouter une actualité : Ajoute une nouvelle actualité.
100
+ * Constant : ADD_NEWS
101
+ * @param {Object} data - Les données à envoyer.
102
+ * @param {string} data.text - Contenu de l’actualité
103
+ * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
104
+ * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
105
+ * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
106
+ * @param {boolean} data.json - Indique que la réponse est au format JSON. (default: true)
107
+ * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
108
+ * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
109
+ * @param {number} data.mediaImg.countImages - Nombre d'images.
110
+ * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
111
+ * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
112
+ * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
113
+ * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
114
+ * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
115
+ * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
116
+ * @returns {Promise<Object>} - Les données de réponse.
117
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
118
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
119
+ * @throws {Error} - En cas d'erreur inattendue.
120
+ */
121
+ async addNews(data = {}) {
122
+ data.parentId = this.id;
123
+ data.parentType = this.getEntityType();
124
+ return this.callIsConnected(() => this._addNews(data));
125
+ }
126
+
127
+ }
128
+
129
+ // Incorporation du mixin dans Project
130
+ Object.assign(Project.prototype, EntityMixin, UtilMixin, NewsMixin);
131
+
@@ -0,0 +1,226 @@
1
+ import { ApiResponseError } from "../error.js";
2
+ import { EntityMixin } from "./EntityMixin.js";
3
+ import { NewsMixin } from "./NewsMixin.js";
4
+ import { UserMixin } from "./UserMixin.js";
5
+ import { UtilMixin } from "./UtilMixin.js";
6
+
7
+ // User.js
8
+ export class User {
9
+ // Champs privés pour protéger l'état
10
+ #id;
11
+ #slug;
12
+ #data;
13
+
14
+ /**
15
+ * Crée une instance de User.
16
+ * @param {ApiClient} apiClient - L'instance d'ApiClient.
17
+ * @param {Object} identifier - Objet contenant { id } ou { slug }.
18
+ * @param {Object} [data={}] - Données supplémentaires.
19
+ */
20
+
21
+ constructor(apiClient, { id, slug } = {}, data = {}) {
22
+ if (!id && !slug) {
23
+ throw new Error("Vous devez fournir un id ou un slug pour créer un User.");
24
+ }
25
+ this.apiClient = apiClient;
26
+ this.#id = id || null;
27
+ this.#slug = slug || null;
28
+ this.#data = data;
29
+ }
30
+
31
+ // Getters en lecture seule pour chaque propriété
32
+ get id() {
33
+ return this.#id;
34
+ }
35
+
36
+ _id(newId) {
37
+ this.#id = newId;
38
+ }
39
+
40
+ get slug() {
41
+ return this.#slug;
42
+ }
43
+
44
+ _slug(newSlug) {
45
+ this.#slug = newSlug;
46
+ }
47
+
48
+ get isConnected() {
49
+ return this.apiClient.isConnected;
50
+ }
51
+
52
+ // Getter pour accéder aux données
53
+ get data() {
54
+ return this.#data;
55
+ }
56
+
57
+ // Méthode interne qui permet de mettre à jour les données
58
+ _setData(newData) {
59
+ this.#data = newData;
60
+ }
61
+
62
+ getEntityType() {
63
+ return "citoyens";
64
+ }
65
+
66
+ get userId() {
67
+ return this.apiClient.userId;
68
+ }
69
+
70
+ get isMe() {
71
+ return this.isConnected && this.userId === this.id;
72
+ }
73
+
74
+ /**
75
+ * Récupère le profil complet de l'utilisateur.
76
+ * Si l'utilisateur est connecté, on appelle le endpoint ME_INFO_URL,
77
+ * sinon, on peut imaginer appeler un endpoint public.
78
+ *
79
+ * @returns {Promise<Object>} Le profil complet.
80
+ */
81
+ async getProfil() {
82
+ return this.apiClient.safeCall(async () => {
83
+ if (this.isMe) {
84
+ const data = await this._meInfoUrl();
85
+ return data;
86
+ } else {
87
+ const data = await this.getPublicProfile();
88
+ return data;
89
+ }
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Changer le mot de passe : Permet de changer le mot de passe d'un utilisateur.
95
+ * Constant : CHANGE_PASSWORD
96
+ */
97
+ async changePassword(data = {}) {
98
+ return this.callIsMe(() => this._changePassword(data));
99
+ }
100
+
101
+ /**
102
+ * Supprimer un compte : Permet de supprimer un compte utilisateur.
103
+ * Constant : DELETE_ACCOUNT
104
+ */
105
+ async delete(data = {}) {
106
+ return this.callIsMe(() => this._deleteAccount(data));
107
+ }
108
+
109
+ /**
110
+ * Mettre à jour les paramètres utilisateur : Mise à jour des paramètres spécifiques d'un utilisateur.
111
+ * Constant : UPDATE_SETTINGS
112
+ */
113
+ async updateSettings(data = {}) {
114
+ return this.callIsMe(() => this._updateSettings(data));
115
+ }
116
+
117
+ /**
118
+ * Mettre à jour la description d'un élément : Permet de mettre à jour la description courte et complète d'un élément.
119
+ * Constant : UPDATE_BLOCK_DESCRIPTION
120
+ */
121
+ async updateDescription(data = {}) {
122
+ return this.callIsMe(() => this._updateBlockDescription(data));
123
+ }
124
+
125
+ /**
126
+ * Mettre à jour les informations d'un élément : Permet de mettre à jour les informations générales d'un élément (nom, contacts, etc.).
127
+ * Constant : UPDATE_BLOCK_INFO
128
+ */
129
+ async updateInfo(data = {}) {
130
+ return this.callIsMe(() => this._updateBlockInfo(data));
131
+ }
132
+
133
+ /**
134
+ * Mettre à jour les réseaux sociaux d'un élément : Permet de mettre à jour les liens vers les réseaux sociaux d'un élément.
135
+ * Constant : UPDATE_BLOCK_SOCIAL
136
+ */
137
+ async updateSocial(data = {}) {
138
+ return this.callIsMe(() => this._updateBlockSocial(data));
139
+ }
140
+
141
+ /**
142
+ * Mettre à jour les localités d'un élément : Permet de mettre à jour l'adresse et les informations géographiques d'un élément.
143
+ * Constant : UPDATE_BLOCK_LOCALITY
144
+ */
145
+ async updateLocality(data = {}) {
146
+ return this.callIsMe(() => this._updateBlockLocality(data));
147
+ }
148
+
149
+ /**
150
+ * Mettre à jour le slug d'un élément : Permet de mettre à jour le slug pour une URL simplifiée.
151
+ * Constant : UPDATE_BLOCK_SLUG
152
+ */
153
+ async updateSlug(slug) {
154
+ try {
155
+ await this._check({ slug });
156
+ } catch (error) {
157
+ if(error instanceof ApiResponseError) {
158
+ throw new ApiResponseError("Erreur lors de la vérification du slug.", error.status, error.data);
159
+ }
160
+ throw error;
161
+ }
162
+ return this.callIsMe(() => this._updateBlockSlug({ slug }));
163
+ }
164
+
165
+ /**
166
+ * Mettre à jour l'image de profil : Permet de mettre à jour l'image de profil d'un utilisateur ou d'une entité.
167
+ * Constant : PROFIL_IMAGE
168
+ */
169
+ async updateImageProfil(image) {
170
+ image = await this.validateImage(image);
171
+ return this.callIsMe(() => this._profilImage({ profil_avatar: image }));
172
+ }
173
+
174
+ /**
175
+ * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
176
+ * Constant : GET_NEWS
177
+ */
178
+ async getNews(data = {}) {
179
+ if (data.pathParams) {
180
+ delete data.pathParams;
181
+ }
182
+ if (!this.isMe){
183
+ // is not me add id
184
+ data.pathParams = { id: this.id };
185
+ }
186
+ return this._getNews(data);
187
+ }
188
+
189
+ /**
190
+ * Ajouter une actualité : Ajoute une nouvelle actualité.
191
+ * Constant : ADD_NEWS
192
+ * @param {Object} data - Les données à envoyer.
193
+ * @param {string} data.text - Contenu de l’actualité
194
+ * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
195
+ * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
196
+ * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
197
+ * @param {boolean} data.json - Indique que la réponse est au format JSON. (default: true)
198
+ * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
199
+ * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
200
+ * @param {number} data.mediaImg.countImages - Nombre d'images.
201
+ * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
202
+ * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
203
+ * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
204
+ * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
205
+ * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
206
+ * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
207
+ * @returns {Promise<Object>} - Les données de réponse.
208
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
209
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
210
+ * @throws {Error} - En cas d'erreur inattendue.
211
+ */
212
+ async addNews(data = {}) {
213
+ if (data.parentId) {
214
+ delete data.parentId;
215
+ }
216
+ if (data.parentType) {
217
+ delete data.parentType;
218
+ }
219
+ return this.callIsMe(() => this._addNews(data));
220
+ }
221
+
222
+ }
223
+
224
+ // Incorporation des mixins dans User
225
+ Object.assign(User.prototype, EntityMixin, UtilMixin, UserMixin, NewsMixin);
226
+