@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.
- package/README.md +4 -4
- package/dist/cocolight-api-client.browser.js +7 -6
- package/dist/cocolight-api-client.browser.js.LICENSE.txt +1 -0
- package/dist/cocolight-api-client.cjs +2 -1
- package/dist/cocolight-api-client.cjs.LICENSE.txt +1 -0
- package/dist/cocolight-api-client.mjs.js +2 -1
- package/dist/cocolight-api-client.mjs.js.LICENSE.txt +1 -0
- package/package.json +12 -4
- package/src/Api.js +157 -0
- package/src/ApiClient.js +105 -8
- package/src/api/EntityMixin.js +249 -0
- package/src/api/NewsMixin.js +168 -0
- package/src/api/Organization.js +131 -0
- package/src/api/Project.js +131 -0
- package/src/api/User.js +226 -0
- package/src/api/UserApi.js +48 -0
- package/src/api/UserMixin.js +59 -0
- package/src/api/UtilMixin.js +82 -0
- package/src/endpoints.module.js +2 -2
- package/src/error.js +51 -3
- package/src/index.js +5 -0
|
@@ -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
|
+
|
package/src/api/User.js
ADDED
|
@@ -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
|
+
|