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.
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" . }} + +
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.
POST /api/login
+{
+ "email": "admin@example.com",
+ "password": "motdepasse"
+}
+
+ Retour : Cookie "token" et JSON {"message":"Login success"}
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"
+}
+ POST /api/message/send2
+{
+ "to": "33612345678",
+ "template_name": "hello_world",
+ "language": "fr",
+ "param1": "Jean",
+ "param2": "commande #1234",
+ "token": "votre_jwt_token"
+}
+ GET /api/whatsapp/webhook (vérification)
+ Envoyer ?hub.mode=subscribe&hub.verify_token=secrettoken&hub.challenge=123
POST /api/whatsapp/webhook (callback messages/statuts)
+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}
+GET /api/user/{id}/conversations
+Filtrable avec ?type=text ou ?filter=today
GET /admin/user/{id}/conversation-thread
(Vue HTML pour un utilisateur)