@communecter/cocolight-api-client 1.0.19 → 1.0.21

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.
@@ -1,3 +1,4 @@
1
+ import { ApiResponseError } from "../error.js";
1
2
  import BaseEntity from "./BaseEntity.js";
2
3
 
3
4
  export class Organization extends BaseEntity {
@@ -132,6 +133,82 @@ export class Organization extends BaseEntity {
132
133
  return super.getSubscribers(data);
133
134
  }
134
135
 
136
+ /**
137
+ * Récupérer les membres de l'organisation.
138
+ * Constant : GET_MEMBERS_ADMIN / GET_MEMBERS_NO_ADMIN
139
+ * @param {Object} data - Les données de requête.
140
+ * @param {Object} options - Options supplémentaires.
141
+ * @param {boolean} options.isAdmin - Indique si l'utilisateur est admin.
142
+ * @param {boolean} options.isInviting - Indique si l'utilisateur est en attente d'invitation.
143
+ * @param {Array} options.roles - Liste des rôles à filtrer.
144
+ * @returns {Promise<Object>} - Un objet contenant le nombre de membres et la liste des membres.
145
+ */
146
+ async getMembers(data = {}, options = {}) {
147
+ const { isAdmin, isInviting, roles = [] } = options;
148
+
149
+ if(this.isMe){
150
+ data.pathParams = { type: this.getEntityType(), id: this.id };
151
+ // NOTE : dans le schema je crois que si pas de data.filters alors le default ce fait avec data.pathParams
152
+ // data.filters = {
153
+ // [`links.memberOf.${this.id}`]: { "$exists": true },
154
+ // [`links.memberOf.${this.id}.toBeValidated`]: { "$exists": false },
155
+ // [`links.memberOf.${this.id}.isInviting`]: { "$exists": false }
156
+ // };
157
+ } else {
158
+ delete data?.pathParams;
159
+ data.filters = this._buildMemberFilters(this.id, { isAdmin, isInviting, roles });
160
+ }
161
+
162
+ const fetchFn = this.isMe
163
+ ? () => this.callIsMe(() => this.endpointApi.getMembersAdmin(data))
164
+ : () => this.endpointApi.getMembersNoAdmin(data);
165
+
166
+ const arrayObjet = await fetchFn();
167
+ if (!Array.isArray(arrayObjet.results)) {
168
+ throw new ApiResponseError("Erreur lors de la récupération des membres", 500, arrayObjet.results);
169
+ }
170
+
171
+ // lier les entités au objets
172
+ const rawList = this._linkEntities(arrayObjet.results);
173
+
174
+ return {
175
+ count: arrayObjet.count?.poi ?? 0,
176
+ results: rawList
177
+ };
178
+ }
179
+
180
+ _buildMemberFilters(id, { isAdmin, isInviting, roles }) {
181
+
182
+ if (typeof isAdmin !== "undefined" && typeof isAdmin !== "boolean") {
183
+ throw new TypeError("isAdmin doit être un booléen.");
184
+ }
185
+ if (typeof isInviting !== "undefined" && typeof isInviting !== "boolean") {
186
+ throw new TypeError("isInviting doit être un booléen.");
187
+ }
188
+ if (!Array.isArray(roles)) {
189
+ throw new TypeError("roles doit être un tableau de chaînes.");
190
+ }
191
+
192
+ const filters = {
193
+ [`links.memberOf.${id}`]: { $exists: true },
194
+ [`links.memberOf.${id}.toBeValidated`]: { $exists: false }
195
+ };
196
+
197
+ if (isInviting === true || isInviting === false) {
198
+ filters[`links.memberOf.${id}.isInviting`] = { $exists: isInviting };
199
+ }
200
+
201
+ if (isAdmin === true) {
202
+ filters[`links.memberOf.${id}.isAdmin`] = { $exists: true };
203
+ }
204
+
205
+ if (Array.isArray(roles) && roles.length > 0) {
206
+ filters[`links.memberOf.${id}.roles`] = { $in: roles };
207
+ }
208
+
209
+ return filters;
210
+ }
211
+
135
212
  /**
136
213
  * Crée une instance de projet et récupère son profil si nécessaire.
137
214
  *