Skip to content

Commit

Permalink
0.02 (#8)
Browse files Browse the repository at this point in the history
* modified:   src/datasource.rs
	modified:   src/datasource_postgresql.rs
	modified:   src/edit.rs
	modified:   src/main.rs
	modified:   src/schema.rs

* modified:   src/main.rs
	modified:   src/schema.rs

* modified:   src/datasource.rs
	modified:   src/main.rs
	modified:   src/schema.rs

* modified:   src/datasource.rs
	modified:   src/main.rs

* deleted:    static/styles.css

* modified:   src/datasource.rs
	modified:   src/datasource_postgresql.rs
  • Loading branch information
oliviers12 authored Sep 29, 2024
1 parent c263926 commit b942c2e
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 248 deletions.
189 changes: 86 additions & 103 deletions src/datasource.rs
Original file line number Diff line number Diff line change
@@ -1,43 +1,22 @@
// datasource.rs
use actix_web::{web, App, HttpResponse, HttpServer};
use actix_web::{web, HttpResponse, Responder};
use serde::Deserialize;

// fichier suplementiare
use crate::edit;
use crate::deploiement;
use std::fs as std_fs;
use crate::datasource_postgresql;
use crate::schema::*;

// ne pas oublier de crer les fonction
// create_cluster, list_source

// Structure de base de données
pub struct Database {
pool: r2d2::Pool<ConnectionManager<PgConnection>>,
}


pub async fn get_all_clusters() -> Vec<Config> {
// Appel à la fonction qui interroge la base de données
let clusters = datasource_postgresql::get_all_clusters().await;

// Transformer les données si nécessaire (ex : adapter les types)
clusters
}

pub async fn create_or_update_cluster(cluster_name: &str, config: Config, data: web::Data<Database>) -> HttpResponse {
datasource_postgresql::edit_cluster_source(cluster_name.to_string(), config, data).await;
HttpResponse::Ok().body("Cluster updated successfully!")
}

pub async fn delete_cluster_source(cluster_name: String, data: web::Data<Database>) -> HttpResponse {
// Appeler la fonction de suppression dans datasource_postgresql
datasource_postgresql::remove_cluster_source(cluster_name, data).await;
HttpResponse::Ok().body("Cluster source deleted successfully!")
#[derive(Deserialize)]
struct DataSource {
sourceid: String,
details: Config,
}

// Fonction pour gérer et afficher les sources de données
async fn gestion_source() -> impl Responder {
// Page web pour afficher/modifier/creer/supprimer des sources de données (PostgreSQL)
async fn menu() -> impl Responder {
// Vérifie si le répertoire "./sources" existe, sinon le crée
if !std_fs::metadata("./sources").is_ok() {
std_fs::create_dir_all("./sources").unwrap();
Expand All @@ -46,8 +25,8 @@ async fn gestion_source() -> impl Responder {
// Lire le contenu du répertoire
let paths = std_fs::read_dir("./sources").unwrap();
let sources: Vec<String> = paths
.filter_map(Result::ok) // Filtre les résultats valides
.filter_map(|entry| entry.file_name().into_string().ok()) // Récupère les noms de fichiers en chaînes
.filter_map(Result::ok)
.filter_map(|entry| entry.file_name().into_string().ok())
.collect();

// Construire le HTML pour afficher les sources
Expand All @@ -59,41 +38,15 @@ async fn gestion_source() -> impl Responder {
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
<title>Gestion des Sources</title>
<style>
/* Styles pour la page */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
th, td {
padding: 10px;
text-align: center;
border: 1px solid #ddd;
}
th {
background-color: #4CAF50;
color: white;
}
.button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
border: none;
cursor: pointer;
}
.button:hover {
background-color: #45a049;
}
body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 20px; }
table { width: 100%; border-collapse: collapse; margin: 20px 0; }
th, td { padding: 10px; text-align: center; border: 1px solid #ddd; }
th { background-color: #4CAF50; color: white; }
.button { background-color: #4CAF50; color: white; padding: 10px 15px; border: none; cursor: pointer; }
.button:hover { background-color: #45a049; }
</style>
</head>
<body>
<h1>Liste des Sources de Données</h1>
<table>
<thead>
Expand All @@ -105,7 +58,6 @@ async fn gestion_source() -> impl Responder {
</thead>
<tbody>");

// Générer une ligne de tableau pour chaque source
for source in sources {
html.push_str(&format!(
"<tr>
Expand All @@ -117,72 +69,103 @@ async fn gestion_source() -> impl Responder {
));
}

// Ajout du formulaire pour ajouter une nouvelle source
html.push_str(r#"</tbody>
</table>
<h2>Ajouter une Source</h2>
<form id="addSourceForm" onsubmit="addSource(); return false;">
<input type="text" id="sourceName" name="source_name" placeholder="Nom de la Source" required>
<button class="button">Ajouter</button>
</form>
<script>
// Fonction pour supprimer une source
async function deleteSource(sourceName) {
console.log(`Suppression de la source : ${sourceName}`);
const response = await fetch(`/source/${sourceName}/delete`, { method: 'DELETE' });
if (response.ok) {
window.location.reload();
} else {
alert('Échec de la suppression de la source.');
}
if (response.ok) { window.location.reload(); } else { alert('Échec de la suppression de la source.'); }
}
// Fonction pour ajouter une nouvelle source
async function addSource() {
const sourceName = document.getElementById("sourceName").value;
console.log(`Ajout de la source : ${sourceName}`);
const response = await fetch(`/source/create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(sourceName)
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ sourceid: sourceName })
});
if (response.ok) {
window.location.reload();
} else {
alert('Échec de l\'ajout de la source.');
}
}
// Fonction pour modifier une source
async function editSource(sourceName) {
console.log(`Édition de la source : ${sourceName}`);
window.location.href = `/source/${sourceName}/edit`;
if (response.ok) { window.location.reload(); } else { alert('Échec de l\'ajout de la source.'); }
}
async function editSource(sourceName) { window.location.href = `/source/${sourceName}/edit`; }
</script>
</body>
</html>"#);

// Retourne la réponse HTML

HttpResponse::Ok().content_type("text/html").body(html)
}

pub async fn create_source() -> impl Responder {
// Implementation
pub async fn list_source() -> HttpResponse {
let paths = std_fs::read_dir("./sources").unwrap();
// il faut retourer les nom des sourceid de ./sources
HttpResponse::Ok().body("Liste de toutes les sources de données")
}

pub async fn delete_source() -> impl Responder {
// Implementation
pub async fn create_source(source: web::Json<DataSource>, data: web::Data<Database>) -> HttpResponse {
datasource_postgresql::new_database(Datasource,DataCluster)
HttpResponse::Ok().body("Source de données créée")
}

pub async fn edit_cluster_source() -> impl Responder {
// Implementation
pub async fn delete_source(sourceid: web::Path<String>, data: web::Data<Database>) -> HttpResponse {
let paths = std_fs::read_dir("./sources").unwrap();
// il faux surpimer le sourceid de ./sources
HttpResponse::Ok().body("Source de données supprimée")
}

pub async fn get_cluster_source() -> impl Responder {
// Implementation
pub async fn get_source(sourceid: web::Path<String>, data: web::Data<Database>) -> HttpResponse {
datasource_postgresql::get_database(Datasource,cluster_id)
HttpResponse::Ok().body("Détails de la source de données")
}

pub async fn edit_source(sourceid: web::Path<String>, source: web::Json<DataSource>, data: web::Data<Database>) -> HttpResponse {
datasource_postgresql::new_database(Datasource,DataCluster)
HttpResponse::Ok().body("Source de données modifiée")
}

pub async fn create_cluster(cluster: web::Json<DataSource>, data: web::Data<Database>) -> HttpResponse {
let datasource = &cluster.sourceid;
let config = &cluster.details;

match datasource_postgresql::create_cluster(datasource, config, data).await {
Ok(_) => HttpResponse::Created().body(format!("Cluster {} créé.", config.cluster_name)),
Err(err) => {
error!("Erreur lors de la création du cluster: {:?}", err);
HttpResponse::InternalServerError().body("Erreur lors de la création du cluster.")
}
}
}

pub async fn edit_cluster(cluster: web::Json<DataSource>, data: web::Data<Database>) -> HttpResponse {
let datasource = &cluster.sourceid;
let config = &cluster.details;

match datasource_postgresql::edit_cluster_database(datasource, config, data).await {
Ok(_) => HttpResponse::Ok().body("Cluster modifié avec succès."),
Err(err) => {
error!("Erreur lors de la modification du cluster: {:?}", err);
HttpResponse::InternalServerError().body("Erreur lors de la modification du cluster.")
}
}
}

pub async fn remove_cluster(cluster: web::Json<DataSource>, data: web::Data<Database>) -> HttpResponse {
let datasource = &cluster.sourceid;
let config = &cluster.details;

match datasource_postgresql::remove_cluster_database(datasource, config, data).await {
Ok(_) => HttpResponse::Ok().body("suprimer Cluster avec succès."),
Err(err) => {
error!("Erreur lors de la suprimer du cluster: {:?}", err);
HttpResponse::InternalServerError().body("Erreur lors de la suprimer du cluster.")
}
}
}

pub async fn list_cluster(data: web::Data<Database>) -> HttpResponse {
// Code pour lister tous les clusters de toutes les sources
// À implémenter
HttpResponse::Ok().body("Liste de tous les clusters")
}
Loading

0 comments on commit b942c2e

Please sign in to comment.