@viridial/shared 1.0.28 → 1.0.30

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.
@@ -28,6 +28,34 @@ export declare const billingService: {
28
28
  * Mettre à jour un abonnement
29
29
  */
30
30
  updateSubscription(id: number, data: SubscriptionUpdate): Promise<Subscription>;
31
+ /**
32
+ * Créer une facture
33
+ */
34
+ createInvoice(data: {
35
+ subscriptionId: number;
36
+ amount: number;
37
+ taxAmount?: number;
38
+ }): Promise<Invoice>;
39
+ /**
40
+ * Récupérer une facture par numéro
41
+ */
42
+ getInvoiceByNumber(invoiceNumber: string): Promise<Invoice>;
43
+ /**
44
+ * Récupérer les factures en retard
45
+ */
46
+ getOverdueInvoices(date?: string): Promise<Invoice[]>;
47
+ /**
48
+ * Mettre à jour le statut d'une facture
49
+ */
50
+ updateInvoiceStatus(id: number, status: string): Promise<Invoice>;
51
+ /**
52
+ * Télécharger une facture en PDF
53
+ */
54
+ downloadInvoicePdf(id: number): Promise<Blob>;
55
+ /**
56
+ * Générer automatiquement une facture pour un abonnement
57
+ */
58
+ generateInvoiceForSubscription(subscriptionId: number): Promise<Invoice>;
31
59
  /**
32
60
  * Annuler un abonnement
33
61
  */
@@ -42,6 +70,8 @@ export declare const billingService: {
42
70
  getExpiringSubscriptions(days?: number): Promise<Subscription[]>;
43
71
  /**
44
72
  * Récupérer toutes les factures
73
+ * Note: Le backend requiert organizationId comme paramètre obligatoire pour la liste
74
+ * Si subscriptionId est fourni, utilise l'endpoint spécifique
45
75
  */
46
76
  getAllInvoices(params?: {
47
77
  organizationId?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"billing.service.d.ts","sourceRoot":"","sources":["../../api/billing.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE/H;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;iCACgC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB3B;;OAEG;4BAC2B,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK5D;;OAEG;wDACuD,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxF;;OAEG;6BAC4B,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKzE;;OAEG;2BAC0B,MAAM,QAAQ,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKrF;;OAEG;2BAC0B,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhF;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK1D;;OAEG;oCACmC,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAStE;;OAEG;4BAC2B;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKtB;;OAEG;uBACsB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD;;OAEG;8CAC6C,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAO3E;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;;;OAIG;gBACe,OAAO,CAAC,YAAY,CAAC;IA8BvC;;OAEG;mBACkB,OAAO,CAAC,IAAI,EAAE,CAAC;IAKpC;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI7C,CAAA"}
1
+ {"version":3,"file":"billing.service.d.ts","sourceRoot":"","sources":["../../api/billing.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE/H;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;iCACgC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB3B;;OAEG;4BAC2B,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK5D;;OAEG;wDACuD,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxF;;OAEG;6BAC4B,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKzE;;OAEG;2BAC0B,MAAM,QAAQ,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKrF;;OAEG;wBACuB;QACxB,cAAc,EAAE,MAAM,CAAA;QACtB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpB;;OAEG;sCACqC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjE;;OAEG;8BAC6B,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAM3D;;OAEG;4BAC2B,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvE;;OAEG;2BAC0B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;mDACkD,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO9E;;OAEG;2BAC0B,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhF;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK1D;;OAEG;oCACmC,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAStE;;;;OAIG;4BAC2B;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAqCtB;;OAEG;uBACsB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD;;OAEG;8CAC6C,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAO3E;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;;;OAIG;gBACe,OAAO,CAAC,YAAY,CAAC;IA8BvC;;OAEG;mBACkB,OAAO,CAAC,IAAI,EAAE,CAAC;IAKpC;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI7C,CAAA"}
@@ -48,6 +48,48 @@ export const billingService = {
48
48
  const response = await httpClient.put(API_ENDPOINTS.BILLING.SUBSCRIPTIONS.BY_ID(id), data);
49
49
  return response.data;
50
50
  },
51
+ /**
52
+ * Créer une facture
53
+ */
54
+ async createInvoice(data) {
55
+ const response = await httpClient.post(API_ENDPOINTS.BILLING.INVOICES.BASE, data);
56
+ return response.data;
57
+ },
58
+ /**
59
+ * Récupérer une facture par numéro
60
+ */
61
+ async getInvoiceByNumber(invoiceNumber) {
62
+ const response = await httpClient.get(API_ENDPOINTS.BILLING.INVOICES.BY_NUMBER(invoiceNumber));
63
+ return response.data;
64
+ },
65
+ /**
66
+ * Récupérer les factures en retard
67
+ */
68
+ async getOverdueInvoices(date) {
69
+ const params = date ? { date } : {};
70
+ const response = await httpClient.get(API_ENDPOINTS.BILLING.INVOICES.OVERDUE, { params });
71
+ return response.data || [];
72
+ },
73
+ /**
74
+ * Mettre à jour le statut d'une facture
75
+ */
76
+ async updateInvoiceStatus(id, status) {
77
+ const response = await httpClient.put(API_ENDPOINTS.BILLING.INVOICES.UPDATE_STATUS(id), { status });
78
+ return response.data;
79
+ },
80
+ /**
81
+ * Télécharger une facture en PDF
82
+ */
83
+ async downloadInvoicePdf(id) {
84
+ return await httpClient.getBlob(`${API_ENDPOINTS.BILLING.INVOICES.BY_ID(id)}/download`);
85
+ },
86
+ /**
87
+ * Générer automatiquement une facture pour un abonnement
88
+ */
89
+ async generateInvoiceForSubscription(subscriptionId) {
90
+ const response = await httpClient.post(`${API_ENDPOINTS.BILLING.INVOICES.BASE}/subscription/${subscriptionId}/generate`);
91
+ return response.data;
92
+ },
51
93
  /**
52
94
  * Annuler un abonnement
53
95
  */
@@ -72,10 +114,41 @@ export const billingService = {
72
114
  },
73
115
  /**
74
116
  * Récupérer toutes les factures
117
+ * Note: Le backend requiert organizationId comme paramètre obligatoire pour la liste
118
+ * Si subscriptionId est fourni, utilise l'endpoint spécifique
75
119
  */
76
120
  async getAllInvoices(params) {
77
- const response = await httpClient.get(API_ENDPOINTS.BILLING.INVOICES.BASE, { params });
78
- return response.data || [];
121
+ // Si subscriptionId est fourni, utiliser l'endpoint spécifique
122
+ if (params?.subscriptionId) {
123
+ return await this.getInvoicesBySubscription(params.subscriptionId);
124
+ }
125
+ // Sinon, utiliser l'endpoint de liste qui requiert organizationId
126
+ if (!params?.organizationId) {
127
+ console.warn('getAllInvoices: organizationId is required for listing invoices');
128
+ return [];
129
+ }
130
+ const queryParams = {
131
+ organizationId: params.organizationId
132
+ };
133
+ if (params?.status) {
134
+ queryParams.status = params.status;
135
+ }
136
+ if (params?.page !== undefined) {
137
+ queryParams.page = params.page;
138
+ }
139
+ if (params?.size !== undefined) {
140
+ queryParams.size = params.size;
141
+ }
142
+ const response = await httpClient.get(API_ENDPOINTS.BILLING.INVOICES.BASE, { params: queryParams });
143
+ // Le backend retourne une Page, extraire le contenu si nécessaire
144
+ if (response.data && Array.isArray(response.data)) {
145
+ return response.data;
146
+ }
147
+ // Si c'est un objet Page avec une propriété content
148
+ if (response.data && response.data.content) {
149
+ return response.data.content;
150
+ }
151
+ return [];
79
152
  },
80
153
  /**
81
154
  * Récupérer une facture par ID
@@ -23,6 +23,10 @@ export declare const documentService: {
23
23
  * Télécharger un document
24
24
  */
25
25
  download(id: number): Promise<Blob>;
26
+ /**
27
+ * Récupérer les documents d'une organisation
28
+ */
29
+ getByOrganizationId(organizationId: number): Promise<Document[]>;
26
30
  /**
27
31
  * Récupérer les documents d'une propriété
28
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"document.service.d.ts","sourceRoot":"","sources":["../../api/document.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;mBACkB,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4B7D;;OAEG;gBACe,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK5C;;OAEG;iBACgB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzC;;OAEG;gCAC+B,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU9D;;OAEG;gCAC+B,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU9D;;OAEG;eACc,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC;;OAEG;uBACgB,MAAM,GAAG,MAAM;IAIlC;;OAEG;mBACY,MAAM,GAAG,MAAM;CAG/B,CAAA"}
1
+ {"version":3,"file":"document.service.d.ts","sourceRoot":"","sources":["../../api/document.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;mBACkB,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4B7D;;OAEG;gBACe,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK5C;;OAEG;iBACgB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;wCACuC,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUtE;;OAEG;gCAC+B,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU9D;;OAEG;gCAC+B,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAU9D;;OAEG;eACc,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC;;OAEG;uBACgB,MAAM,GAAG,MAAM;IAIlC;;OAEG;mBACY,MAAM,GAAG,MAAM;CAG/B,CAAA"}
@@ -39,10 +39,16 @@ export const documentService = {
39
39
  * Télécharger un document
40
40
  */
41
41
  async download(id) {
42
- const response = await httpClient.get(API_ENDPOINTS.DOCUMENTS.DOWNLOAD(id), {
43
- responseType: 'blob'
42
+ return await httpClient.getBlob(API_ENDPOINTS.DOCUMENTS.DOWNLOAD(id));
43
+ },
44
+ /**
45
+ * Récupérer les documents d'une organisation
46
+ */
47
+ async getByOrganizationId(organizationId) {
48
+ const response = await httpClient.get(API_ENDPOINTS.DOCUMENTS.BASE, {
49
+ params: { organizationId }
44
50
  });
45
- return response.data;
51
+ return response.data || [];
46
52
  },
47
53
  /**
48
54
  * Récupérer les documents d'une propriété
@@ -9,6 +9,7 @@ declare class HttpClient {
9
9
  private setupInterceptors;
10
10
  private handleError;
11
11
  get<T>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
12
+ getBlob(url: string, config?: AxiosRequestConfig): Promise<Blob>;
12
13
  post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
13
14
  put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
14
15
  patch<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"http.client.d.ts","sourceRoot":"","sources":["../../api/http.client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAsB,KAAK,kBAAkB,EAAsB,MAAM,OAAO,CAAA;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,oBAAoB,CAAA;AAgB/D;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAe;gBAEjB,OAAO,CAAC,EAAE,MAAM;IAc5B,OAAO,CAAC,iBAAiB;IAoDzB,OAAO,CAAC,WAAW;IAcb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASzE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAStF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASrF,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASvF,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAQnF;AAED,eAAO,MAAM,UAAU,YAAmB,CAAA"}
1
+ {"version":3,"file":"http.client.d.ts","sourceRoot":"","sources":["../../api/http.client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAsB,KAAK,kBAAkB,EAAsB,MAAM,OAAO,CAAA;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,oBAAoB,CAAA;AAgB/D;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAe;gBAEjB,OAAO,CAAC,EAAE,MAAM;IAc5B,OAAO,CAAC,iBAAiB;IAoDzB,OAAO,CAAC,WAAW;IAcb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAStF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASrF,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IASvF,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAQnF;AAED,eAAO,MAAM,UAAU,YAAmB,CAAA"}
@@ -91,6 +91,13 @@ class HttpClient {
91
91
  message: 'Success'
92
92
  };
93
93
  }
94
+ async getBlob(url, config) {
95
+ const response = await this.client.get(url, {
96
+ ...config,
97
+ responseType: 'blob'
98
+ });
99
+ return response.data;
100
+ }
94
101
  async post(url, data, config) {
95
102
  const response = await this.client.post(url, data, config);
96
103
  return {
@@ -0,0 +1,52 @@
1
+ import type { Notification, NotificationCreate, NotificationSendRequest } from '../types/notification.types';
2
+ /**
3
+ * Service de gestion des notifications
4
+ */
5
+ export declare const notificationService: {
6
+ /**
7
+ * Récupérer toutes les notifications d'un destinataire
8
+ */
9
+ getNotifications(params: {
10
+ recipientId: number;
11
+ unread?: boolean;
12
+ }): Promise<Notification[]>;
13
+ /**
14
+ * Récupérer une notification par ID
15
+ */
16
+ getNotificationById(id: number): Promise<Notification>;
17
+ /**
18
+ * Récupérer le nombre de notifications non lues
19
+ */
20
+ getUnreadCount(recipientId: number): Promise<number>;
21
+ /**
22
+ * Créer une notification
23
+ */
24
+ createNotification(data: NotificationCreate): Promise<Notification>;
25
+ /**
26
+ * Envoyer une notification
27
+ */
28
+ sendNotification(data: NotificationSendRequest): Promise<Notification>;
29
+ /**
30
+ * Marquer une notification comme lue
31
+ */
32
+ markAsRead(id: number): Promise<Notification>;
33
+ /**
34
+ * Marquer toutes les notifications comme lues
35
+ * Note: Le backend ne fournit pas d'endpoint pour marquer toutes les notifications comme lues
36
+ * On doit donc marquer chaque notification individuellement
37
+ */
38
+ markAllAsRead(recipientId: number): Promise<void>;
39
+ /**
40
+ * Archiver une notification
41
+ */
42
+ markAsArchived(id: number): Promise<Notification>;
43
+ /**
44
+ * Supprimer une notification
45
+ */
46
+ deleteNotification(id: number): Promise<void>;
47
+ /**
48
+ * Mettre à jour une notification
49
+ */
50
+ updateNotification(id: number, data: Partial<NotificationCreate>): Promise<Notification>;
51
+ };
52
+ //# sourceMappingURL=notification.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.service.d.ts","sourceRoot":"","sources":["../../api/notification.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAuB,MAAM,6BAA6B,CAAA;AAEjI;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;6BAC4B;QAC7B,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,OAAO,CAAA;KACjB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB3B;;OAEG;4BAC2B,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS5D;;OAEG;gCAC+B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D;;OAEG;6BAC4B,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAYzE;;OAEG;2BAC0B,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAY5E;;OAEG;mBACkB,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWnD;;;;OAIG;+BAC8B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;uBACsB,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOvD;;OAEG;2BAC0B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;2BAC0B,MAAM,QAAQ,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAW/F,CAAA"}
@@ -0,0 +1,115 @@
1
+ import { httpClient } from './http.client';
2
+ import { API_ENDPOINTS } from '../constants/api.constants';
3
+ /**
4
+ * Service de gestion des notifications
5
+ */
6
+ export const notificationService = {
7
+ /**
8
+ * Récupérer toutes les notifications d'un destinataire
9
+ */
10
+ async getNotifications(params) {
11
+ const queryParams = {
12
+ recipientId: params.recipientId
13
+ };
14
+ if (params.unread !== undefined) {
15
+ queryParams.unread = params.unread;
16
+ }
17
+ const response = await httpClient.get(API_ENDPOINTS.NOTIFICATIONS.BASE, { params: queryParams });
18
+ const notifications = response.data || [];
19
+ // Mapper read depuis readAt pour compatibilité avec l'UI
20
+ return notifications.map(n => ({
21
+ ...n,
22
+ read: !!n.readAt || n.status === 'READ'
23
+ }));
24
+ },
25
+ /**
26
+ * Récupérer une notification par ID
27
+ */
28
+ async getNotificationById(id) {
29
+ const response = await httpClient.get(API_ENDPOINTS.NOTIFICATIONS.BY_ID(id));
30
+ const notification = response.data;
31
+ return {
32
+ ...notification,
33
+ read: !!notification.readAt || notification.status === 'READ'
34
+ };
35
+ },
36
+ /**
37
+ * Récupérer le nombre de notifications non lues
38
+ */
39
+ async getUnreadCount(recipientId) {
40
+ const response = await httpClient.get(API_ENDPOINTS.NOTIFICATIONS.UNREAD_COUNT, { params: { recipientId } });
41
+ return response.data?.count || 0;
42
+ },
43
+ /**
44
+ * Créer une notification
45
+ */
46
+ async createNotification(data) {
47
+ const response = await httpClient.post(API_ENDPOINTS.NOTIFICATIONS.BASE, data);
48
+ const notification = response.data;
49
+ return {
50
+ ...notification,
51
+ read: !!notification.readAt || notification.status === 'READ'
52
+ };
53
+ },
54
+ /**
55
+ * Envoyer une notification
56
+ */
57
+ async sendNotification(data) {
58
+ const response = await httpClient.post(API_ENDPOINTS.NOTIFICATIONS.SEND, data);
59
+ const notification = response.data;
60
+ return {
61
+ ...notification,
62
+ read: !!notification.readAt || notification.status === 'READ'
63
+ };
64
+ },
65
+ /**
66
+ * Marquer une notification comme lue
67
+ */
68
+ async markAsRead(id) {
69
+ const response = await httpClient.put(API_ENDPOINTS.NOTIFICATIONS.MARK_READ(id));
70
+ const notification = response.data;
71
+ return {
72
+ ...notification,
73
+ read: true
74
+ };
75
+ },
76
+ /**
77
+ * Marquer toutes les notifications comme lues
78
+ * Note: Le backend ne fournit pas d'endpoint pour marquer toutes les notifications comme lues
79
+ * On doit donc marquer chaque notification individuellement
80
+ */
81
+ async markAllAsRead(recipientId) {
82
+ // Récupérer toutes les notifications non lues
83
+ const unreadNotifications = await this.getNotifications({
84
+ recipientId,
85
+ unread: true
86
+ });
87
+ // Marquer chacune comme lue
88
+ const promises = unreadNotifications.map(n => this.markAsRead(n.id));
89
+ await Promise.all(promises);
90
+ },
91
+ /**
92
+ * Archiver une notification
93
+ */
94
+ async markAsArchived(id) {
95
+ const response = await httpClient.put(API_ENDPOINTS.NOTIFICATIONS.MARK_ARCHIVED(id));
96
+ return response.data;
97
+ },
98
+ /**
99
+ * Supprimer une notification
100
+ */
101
+ async deleteNotification(id) {
102
+ await httpClient.delete(API_ENDPOINTS.NOTIFICATIONS.BY_ID(id));
103
+ },
104
+ /**
105
+ * Mettre à jour une notification
106
+ */
107
+ async updateNotification(id, data) {
108
+ const response = await httpClient.put(API_ENDPOINTS.NOTIFICATIONS.BY_ID(id), data);
109
+ const notification = response.data;
110
+ return {
111
+ ...notification,
112
+ read: !!notification.readAt || notification.status === 'READ'
113
+ };
114
+ }
115
+ };
@@ -68,6 +68,14 @@ export declare const API_ENDPOINTS: {
68
68
  readonly DEFAULT: "/api/billing/plans/default";
69
69
  };
70
70
  };
71
+ readonly NOTIFICATIONS: {
72
+ readonly BASE: "/api/notifications";
73
+ readonly BY_ID: (id: number) => string;
74
+ readonly SEND: "/api/notifications/send";
75
+ readonly MARK_READ: (id: number) => string;
76
+ readonly MARK_ARCHIVED: (id: number) => string;
77
+ readonly UNREAD_COUNT: "/api/notifications/unread/count";
78
+ };
71
79
  };
72
80
  /**
73
81
  * Get API base URL from environment
@@ -1 +1 @@
1
- {"version":3,"file":"api.constants.d.ts","sourceRoot":"","sources":["../../constants/api.constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;6BAcV,MAAM;gCACH,MAAM;;;;;6BAMT,MAAM;;;;gCAIH,MAAM;;;;6BAKT,MAAM;sCACG,MAAM;;sCAEN,MAAM;;;;;;6BAOf,MAAM;;gCAEH,MAAM;;;;;;;iCAQP,MAAM;uDACgB,MAAM;8DACC,MAAM;kCAClC,MAAM;iCACP,MAAM;;;;;iCAKN,MAAM;gDACS,MAAM;uDACC,MAAM;qCACxB,MAAM;yCACF,MAAM;;;;;iCAKd,MAAM;qCACF,MAAM;;;;CAIlB,CAAA;AAEV;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,SAAS,CAAA"}
1
+ {"version":3,"file":"api.constants.d.ts","sourceRoot":"","sources":["../../constants/api.constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;6BAcV,MAAM;gCACH,MAAM;;;;;6BAMT,MAAM;;;;gCAIH,MAAM;;;;6BAKT,MAAM;sCACG,MAAM;;sCAEN,MAAM;;;;;;6BAOf,MAAM;;gCAEH,MAAM;;;;;;;iCAQP,MAAM;uDACgB,MAAM;8DACC,MAAM;kCAClC,MAAM;iCACP,MAAM;;;;;iCAKN,MAAM;gDACS,MAAM;uDACC,MAAM;qCACxB,MAAM;yCACF,MAAM;;;;;iCAKd,MAAM;qCACF,MAAM;;;;;;6BAOZ,MAAM;;iCAEF,MAAM;qCACF,MAAM;;;CAGpB,CAAA;AAEV;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,SAAS,CAAA"}
@@ -73,6 +73,15 @@ export const API_ENDPOINTS = {
73
73
  BY_NAME: (name) => `/api/billing/plans/name/${name}`,
74
74
  DEFAULT: '/api/billing/plans/default'
75
75
  }
76
+ },
77
+ // Notifications
78
+ NOTIFICATIONS: {
79
+ BASE: '/api/notifications',
80
+ BY_ID: (id) => `/api/notifications/${id}`,
81
+ SEND: '/api/notifications/send',
82
+ MARK_READ: (id) => `/api/notifications/${id}/read`,
83
+ MARK_ARCHIVED: (id) => `/api/notifications/${id}/archive`,
84
+ UNREAD_COUNT: '/api/notifications/unread/count'
76
85
  }
77
86
  };
78
87
  /**
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export { organizationService } from './api/organization.service';
9
9
  export { documentService } from './api/document.service';
10
10
  export { statsService } from './api/stats.service';
11
11
  export { billingService } from './api/billing.service';
12
+ export { notificationService } from './api/notification.service';
12
13
  export type { Organization, OrganizationCreate, OrganizationUpdate, OrganizationSearchParams, Team, TeamCreate, TeamUpdate, OrganizationUser } from './api/organization.service';
13
14
  export { useAuthStore } from './stores/auth.store';
14
15
  export { useUserStore } from './stores/user.store';
@@ -22,6 +23,7 @@ export type * from './types/user.types';
22
23
  export type * from './types/document.types';
23
24
  export type * from './types/stats.types';
24
25
  export type * from './types/billing.types';
26
+ export type * from './types/notification.types';
25
27
  export { PropertyType, PropertyStatus } from './types/property.types';
26
28
  export { tokenUtils } from './utils/token.utils';
27
29
  export { API_ENDPOINTS, API_BASE_URL } from './constants/api.constants';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EACjB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG/C,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,qBAAqB,CAAA;AACxC,mBAAmB,uBAAuB,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EACjB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG/C,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,qBAAqB,CAAA;AACxC,mBAAmB,uBAAuB,CAAA;AAC1C,mBAAmB,4BAA4B,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ export { organizationService } from './api/organization.service';
10
10
  export { documentService } from './api/document.service';
11
11
  export { statsService } from './api/stats.service';
12
12
  export { billingService } from './api/billing.service';
13
+ export { notificationService } from './api/notification.service';
13
14
  // Stores
14
15
  export { useAuthStore } from './stores/auth.store';
15
16
  export { useUserStore } from './stores/user.store';
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Types pour le module de notifications
3
+ */
4
+ export interface Notification {
5
+ id: number;
6
+ type: string;
7
+ title: string;
8
+ message?: string;
9
+ recipientId: number;
10
+ organizationId?: number;
11
+ senderId?: number;
12
+ status: 'PENDING' | 'SENT' | 'READ' | 'ARCHIVED';
13
+ channel?: 'IN_APP' | 'PUSH' | 'SMS' | 'EMAIL';
14
+ targetType?: string;
15
+ targetId?: number;
16
+ actionUrl?: string;
17
+ readAt?: string;
18
+ active?: boolean;
19
+ metadata?: string | Record<string, any>;
20
+ createdAt: string;
21
+ updatedAt?: string;
22
+ read?: boolean;
23
+ }
24
+ export interface NotificationCreate {
25
+ type: string;
26
+ title: string;
27
+ message?: string;
28
+ recipientId: number;
29
+ organizationId: number;
30
+ senderId?: number;
31
+ channel?: 'IN_APP' | 'PUSH' | 'SMS' | 'EMAIL';
32
+ targetType?: string;
33
+ targetId?: number;
34
+ actionUrl?: string;
35
+ metadata?: string | Record<string, any>;
36
+ }
37
+ export interface NotificationSendRequest {
38
+ type: string;
39
+ title: string;
40
+ message: string;
41
+ recipientId: number;
42
+ organizationId: number;
43
+ senderId?: number;
44
+ channel?: 'IN_APP' | 'PUSH' | 'SMS' | 'EMAIL';
45
+ targetType?: string;
46
+ targetId?: number;
47
+ }
48
+ export interface UnreadCountResponse {
49
+ count: number;
50
+ }
51
+ //# sourceMappingURL=notification.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.types.d.ts","sourceRoot":"","sources":["../../types/notification.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;IAChD,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Types pour le module de notifications
3
+ */
4
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viridial/shared",
3
- "version": "1.0.28",
3
+ "version": "1.0.30",
4
4
  "type": "module",
5
5
  "description": "Shared modules for Real Estate frontend applications - Vue 3, TypeScript, Pinia, Axios",
6
6
  "main": "./dist/index.js",