Gestion de Projet
Gérez les projets au sein des locataires mindzieStudio. Créez, récupérez, mettez à jour et supprimez des projets contenant des jeux de données, des investigations, des tableaux de bord et des workflows d'analyse.
Test de Connectivité
Ping Non Autorisé
GET /api/{tenantId}/project/unauthorized-ping
Point de terminaison de test ne nécessitant pas d'authentification. Utilisez-le pour vérifier la connectivité réseau.
Réponse
Ping Successful
Ping Authentifié
GET /api/{tenantId}/project/ping
Point de terminaison ping authentifié pour vérifier l'accès à l'API pour un locataire spécifique.
Réponse (200 OK)
Ping Successful (tenant id: {tenantId})
Lister Tous les Projets
GET /api/{tenantId}/project
Récupère une liste paginée de tous les projets auxquels l'utilisateur authentifié a accès dans le locataire spécifié.
Paramètres de Chemin
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
tenantId |
GUID | Oui | L'identifiant du locataire |
Paramètres de Requête
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
page |
entier | 1 | Numéro de page pour la pagination |
pageSize |
entier | 50 | Nombre d'éléments par page (max recommandé : 100) |
Réponse (200 OK)
{
"projects": [
{
"projectId": "87654321-4321-4321-4321-210987654321",
"tenantId": "12345678-1234-1234-1234-123456789012",
"projectName": "Purchase Order Analysis",
"projectDescription": "Process mining analysis of P2P workflow",
"dateCreated": "2024-01-15T10:30:00Z",
"dateModified": "2024-01-20T14:45:00Z",
"createdBy": "user@example.com",
"modifiedBy": "user@example.com",
"isActive": true,
"datasetCount": 3,
"investigationCount": 5,
"dashboardCount": 2,
"userCount": 8
}
],
"totalCount": 15,
"page": 1,
"pageSize": 50
}
Champs de l'Objet Projet
| Champ | Type | Description |
|---|---|---|
projectId |
GUID | Identifiant unique du projet |
tenantId |
GUID | Locataire auquel appartient le projet |
projectName |
string | Nom affiché du projet |
projectDescription |
string | Description du projet |
dateCreated |
datetime | Date de création du projet |
dateModified |
datetime | Date de dernière modification du projet |
createdBy |
string | Utilisateur ayant créé le projet |
modifiedBy |
string | Utilisateur ayant modifié le projet pour la dernière fois |
isActive |
boolean | Indique si le projet est actif |
datasetCount |
integer | Nombre de jeux de données dans le projet |
investigationCount |
integer | Nombre d'investigations |
dashboardCount |
integer | Nombre de tableaux de bord |
userCount |
integer | Nombre d'utilisateurs ayant accès |
Obtenir les Détails d'un Projet
GET /api/{tenantId}/project/{projectId}
Récupère les informations détaillées pour un projet spécifique.
Paramètres de Chemin
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
tenantId |
GUID | Oui | L'identifiant du locataire |
projectId |
GUID | Oui | L'identifiant du projet |
Réponse (200 OK)
Même structure que l'objet projet dans la réponse de liste.
Réponses d'Erreur
Non Trouvé (404) :
{
"error": "Project not found with ID '{projectId}'. The project may have been deleted or the ID is incorrect.",
"projectId": "87654321-4321-4321-4321-210987654321"
}
Obtenir le Résumé d'un Projet
GET /api/{tenantId}/project/{projectId}/summary
Récupère des statistiques agrégées et des métriques clés pour le projet.
Réponse (200 OK)
{
"projectId": "87654321-4321-4321-4321-210987654321",
"projectName": "Purchase Order Analysis",
"projectDescription": "Process mining analysis of P2P workflow",
"dateCreated": "2024-01-15T10:30:00Z",
"dateModified": "2024-01-20T14:45:00Z",
"statistics": {
"totalDatasets": 3,
"totalInvestigations": 5,
"totalDashboards": 2,
"totalNotebooks": 12,
"totalUsers": 8
}
}
Créer un Projet
POST /api/{tenantId}/project
Crée un nouveau projet dans le locataire spécifié.
Corps de la Requête
{
"projectName": "New Analysis Project",
"projectDescription": "Process mining analysis for procurement workflow"
}
Champs de la Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
projectName |
string | Oui | Nom du projet (max 255 caractères) |
projectDescription |
string | Non | Description (max 1000 caractères) |
Réponse (201 Created)
Retourne l'objet projet créé (même structure que Get Project).
Réponses d'Erreur
Requête Incorrecte (400) :
{
"error": "Validation failed",
"validationErrors": ["Project name is required"]
}
Mettre à Jour un Projet
PUT /api/{tenantId}/project/{projectId}
Met à jour les propriétés d'un projet existant.
Paramètres de Chemin
| Paramètre | Type | Description |
|---|---|---|
tenantId |
GUID | L'identifiant du locataire |
projectId |
GUID | L'identifiant du projet |
Corps de la Requête
{
"projectName": "Updated Project Name",
"projectDescription": "Updated description",
"isActive": true
}
Champs de la Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
projectName |
string | Oui | Nouveau nom du projet |
projectDescription |
string | Non | Nouvelle description |
isActive |
boolean | Non | Activer/désactiver le projet |
Réponse (200 OK)
Retourne l'objet projet mis à jour.
Supprimer un Projet
DELETE /api/{tenantId}/project/{projectId}
Supprime définitivement un projet et TOUTES les données associées.
ATTENTION : Il s'agit d'une opération DESTRUCTRICE qui NE PEUT PAS être annulée.
Suppression en Cascade Inclut
- Tous les jeux de données du projet
- Toutes les investigations et notebooks
- Tous les tableaux de bord
- Toutes les permissions des utilisateurs
- Tous les fichiers stockés dans les blobs (journaux d'événements, pièces jointes)
Paramètres de Chemin
| Paramètre | Type | Description |
|---|---|---|
tenantId |
GUID | L'identifiant du locataire |
projectId |
GUID | L'identifiant du projet |
Réponse (200 OK)
{
"message": "Project deleted successfully",
"projectId": "87654321-4321-4321-4321-210987654321"
}
Exemples d'Implémentation
cURL
# Lister tous les projets
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Obtenir les détails d'un projet
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Créer un nouveau projet
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectName": "Q4 Analysis",
"projectDescription": "Quarterly procurement analysis"
}'
# Mettre à jour un projet
curl -X PUT "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectName": "Q4 Analysis - Final",
"projectDescription": "Updated description"
}'
# Supprimer un projet (ATTENTION : Irréversible !)
curl -X DELETE "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Python
import requests
TENANT_ID = '12345678-1234-1234-1234-123456789012'
BASE_URL = 'https://your-mindzie-instance.com'
class ProjectManager:
def __init__(self, token):
self.headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
def list_projects(self, page=1, page_size=50):
"""Lister tous les projets dans le locataire."""
url = f'{BASE_URL}/api/{TENANT_ID}/project'
params = {'page': page, 'pageSize': page_size}
response = requests.get(url, headers=self.headers, params=params)
response.raise_for_status()
return response.json()
def get_project(self, project_id):
"""Obtenir les détails d'un projet."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def create_project(self, name, description=''):
"""Créer un nouveau projet."""
url = f'{BASE_URL}/api/{TENANT_ID}/project'
payload = {
'projectName': name,
'projectDescription': description
}
response = requests.post(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def update_project(self, project_id, name=None, description=None, is_active=None):
"""Mettre à jour un projet existant."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
payload = {}
if name:
payload['projectName'] = name
if description is not None:
payload['projectDescription'] = description
if is_active is not None:
payload['isActive'] = is_active
response = requests.put(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def delete_project(self, project_id):
"""Supprimer un projet (ATTENTION : Irréversible !)."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
response = requests.delete(url, headers=self.headers)
response.raise_for_status()
return response.json()
# Utilisation
manager = ProjectManager('your-auth-token')
# Lister tous les projets
result = manager.list_projects()
print(f"Total projets : {result['totalCount']}")
for project in result['projects']:
print(f"- {project['projectName']} : {project['datasetCount']} jeux de données")
# Créer un nouveau projet
new_project = manager.create_project(
name='API Test Project',
description='Créé via API'
)
print(f"Créé : {new_project['projectId']}")
JavaScript/Node.js
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const BASE_URL = 'https://your-mindzie-instance.com';
class ProjectManager {
constructor(token) {
this.headers = {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
};
}
async listProjects(page = 1, pageSize = 50) {
const url = `${BASE_URL}/api/${TENANT_ID}/project?page=${page}&pageSize=${pageSize}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Échec : ${response.status}`);
return await response.json();
}
async getProject(projectId) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Échec : ${response.status}`);
return await response.json();
}
async createProject(name, description = '') {
const url = `${BASE_URL}/api/${TENANT_ID}/project`;
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: JSON.stringify({ projectName: name, projectDescription: description })
});
if (!response.ok) throw new Error(`Échec : ${response.status}`);
return await response.json();
}
async deleteProject(projectId) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}`;
const response = await fetch(url, {
method: 'DELETE',
headers: this.headers
});
if (!response.ok) throw new Error(`Échec : ${response.status}`);
return await response.json();
}
}
// Utilisation
const manager = new ProjectManager('your-auth-token');
const projects = await manager.listProjects();
console.log(`Trouvé ${projects.totalCount} projets`);