diff --git a/backend/handlers/main.go b/backend/handlers/main.go index 7f8ea35..8f2799a 100644 --- a/backend/handlers/main.go +++ b/backend/handlers/main.go @@ -372,8 +372,6 @@ func WebhookReceiveHandler(db *gorm.DB) http.HandlerFunc { w.WriteHeader(http.StatusOK) } } - - func CreateUser(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var user models.User @@ -455,7 +453,6 @@ func DeleteUser(db *gorm.DB) http.HandlerFunc { w.WriteHeader(http.StatusNoContent) } } - func HandleTemplateTest(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { val := r.Context().Value("ssoid") diff --git a/backend/renders/renders.go b/backend/renders/renders.go index 76217f7..6e11699 100644 --- a/backend/renders/renders.go +++ b/backend/renders/renders.go @@ -25,6 +25,19 @@ func TestMessagesPages(w http.ResponseWriter, r *http.Request){ func TestMessagesPages2(w http.ResponseWriter, r *http.Request){ renderTemplate(w,"test",nil) } +func ApiDocPage(db *gorm.DB) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{} + if val := r.Context().Value("ssoid"); val != nil { + var user models.User + if err := db.Where("sso_id = ?", val.(string)).First(&user).Error; err == nil { + data["User"] = user + } + } + renderTemplate(w, "apidoc", data) + } +} + func AdminUserList(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var users []models.User diff --git a/backend/routes/routes.go b/backend/routes/routes.go index b12e838..1cf7327 100644 --- a/backend/routes/routes.go +++ b/backend/routes/routes.go @@ -63,7 +63,8 @@ func RoutesPublic(r *mux.Router, db *gorm.DB) { http.Redirect(w, r, "/login", http.StatusSeeOther) }) - + r.HandleFunc("/apidoc", renders.ApiDocPage(db)) + // // Ici on place les vues et API qui doivent être protégées // r.HandleFunc("/stream", StreamHandler) diff --git a/frontend/templates/apidoc.pages.tmpl b/frontend/templates/apidoc.pages.tmpl new file mode 100644 index 0000000..37ee0bb --- /dev/null +++ b/frontend/templates/apidoc.pages.tmpl @@ -0,0 +1,89 @@ +{{ define "apidoc.pages.tmpl" }} +{{ template "head" . }} + +
+

📘 API WhatsApp SaaS – Documentation JSON

+ +
+

Tu peux utiliser ces endpoints via Postman, PHP (cURL) ou JS. Toutes les requêtes POST attendent du JSON dans le corps et certaines nécessitent un JWT dans un token ou un cookie.

+
+ +
+

🔐 Authentification

+

POST /api/login

+
{
+  "email": "admin@example.com",
+  "password": "motdepasse"
+}
+ +

Retour : Cookie "token" et JSON {"message":"Login success"}

+
+ +
+

📤 Envoi message simple

+

POST /api/message/send (nécessite token)

+
{
+  "to": "33612345678",
+  "type": "text",
+  "text": {
+    "body": "Bonjour depuis l'API"
+  },
+  "token": "votre_jwt_token_si_poster_via_JSON"
+}
+
+ +
+

📤 Envoi message template

+

POST /api/message/send2

+
{
+  "to": "33612345678",
+  "template_name": "hello_world",
+  "language": "fr",
+  "param1": "Jean",
+  "param2": "commande #1234",
+  "token": "votre_jwt_token"
+}
+
+ +
+

📥 Webhook WhatsApp

+

GET /api/whatsapp/webhook (vérification)
+ Envoyer ?hub.mode=subscribe&hub.verify_token=secrettoken&hub.challenge=123

+ +

POST /api/whatsapp/webhook (callback messages/statuts)

+
+ +
+

👤 Utilisateurs (admin uniquement)

+ +

POST /api/user/create

+
{
+  "email": "client@demo.com",
+  "password": "secret",
+  "sso_id": "CLIENT123",
+  "role": "CLIENT",
+  "is_active": true,
+  "whatsapp_token": "EAAxxxxx",
+  "whatsapp_phone_number_id": "123456789",
+  "monthly_credits": 100
+}
+ +

PUT /api/user/update/{id}

+
{
+  "email": "nouveau@demo.com",
+  "is_active": true,
+  "monthly_credits": 200
+}
+ +

DELETE /api/user/delete/{id}

+
+ +
+

💬 Conversations

+

GET /api/user/{id}/conversations

+

Filtrable avec ?type=text ou ?filter=today

+ +

GET /admin/user/{id}/conversation-thread
(Vue HTML pour un utilisateur)

+
+
+{{ end }} diff --git a/frontend/templates/sidebar.pages.tmpl b/frontend/templates/sidebar.pages.tmpl index 85d9bd6..87b257b 100644 --- a/frontend/templates/sidebar.pages.tmpl +++ b/frontend/templates/sidebar.pages.tmpl @@ -1,5 +1,5 @@ {{ define "sidebar" }} -