Skip to content
Open

Test #13

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 61 additions & 15 deletions Delivery/Controllers/chat_controller.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package controllers

import (
"encoding/json"
"net/http"
"os"
"path/filepath"
domain "sema/Domain"
"strings"

"github.com/gin-gonic/gin"
)
Expand All @@ -18,21 +22,20 @@ func NewChatController(uc domain.ChatUsecaseI) *ChatController {
}

func (cc *ChatController) ComposeCardController(c *gin.Context) {
var actBlk ActionBlockDTO
var actBlk ActionBlockDTO
err := c.ShouldBindJSON(&actBlk)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error" : "invalid JSON format. unable to bind!"})
return
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid JSON format. unable to bind!"})
return
}


result, err := cc.ChatUc.ComposeCardUsecase(ChangeToDomain(actBlk));
result, err := cc.ChatUc.ComposeCardUsecase(ChangeToDomain(actBlk))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error" : err.Error()})
return
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}

c.JSON(http.StatusOK, gin.H{"message" : "action card generated successfully", "card" : result})
c.JSON(http.StatusOK, gin.H{"message": "action card generated successfully", "card": result})
}

func (cc *ChatController) RiskCheckController(c *gin.Context) {
Expand All @@ -46,10 +49,10 @@ func (cc *ChatController) RiskCheckController(c *gin.Context) {

risk, tags, err := cc.ChatUc.RiskCheckUsecase(req.Content)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error" : err.Error()})
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message" : "Risk Calculated successfully!", "risk" : risk, "tags" : tags})
c.JSON(http.StatusOK, gin.H{"message": "Risk Calculated successfully!", "risk": risk, "tags": tags})
}

func (cc *ChatController) IntentMappingController(c *gin.Context) {
Expand All @@ -58,12 +61,55 @@ func (cc *ChatController) IntentMappingController(c *gin.Context) {
}
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"})
return
return
}
key, err := cc.ChatUc.IntentMappingUsecase(req.Content)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"topic_key": key})
}

func (cc *ChatController) ResourceController(c *gin.Context) {
region := c.Query("region")
if region == "" {
region = "ET"
}

region = strings.ToUpper(region)
path := filepath.Join("assets", "resources/region", region+".json")
data, err := os.ReadFile(path)
if err != nil {
c.JSON(http.StatusNotFound, gin.H{"error: ": "resources for region " + region + " not found"})
return
}

var jsonData interface{}
if err := json.Unmarshal(data, &jsonData); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error: ": "Invalid JSON format"})
return
}
c.JSON(http.StatusOK, gin.H{"resources: ": jsonData})
}

func (cc *ChatController) OfflinePackController(c *gin.Context) {
lang := c.Query("lang")
if lang == "" {
lang = "en"
}
lang = strings.ToLower(lang)
path := filepath.Join("assets", "offline-pack", "offline-pack."+lang+".json")
data, err := os.ReadFile(path)
if err != nil {
c.JSON(http.StatusNotFound, gin.H{"error: ": "offline-pack not found for language " + lang})
return
}
key , err := cc.ChatUc.IntentMappingUsecase(req.Content)
if err != nil{
c.JSON(http.StatusInternalServerError, gin.H{"error" : err.Error()})

var jsonData interface{}
if err := json.Unmarshal(data, &jsonData); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error: ": "Invalid JSON format"})
return
}
c.JSON(http.StatusOK, gin.H{"topic_key" : key})
c.JSON(http.StatusOK, gin.H{"action-block: ": jsonData})
}
10 changes: 5 additions & 5 deletions Delivery/Routers/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@ package routers

import (
controllers "sema/Delivery/Controllers"
infrastructure "sema/Infrastructure"

"github.com/gin-gonic/gin"
)

func SetupRouter(ChtCtrl *controllers.ChatController) {
router := gin.Default()

// Chat routes
// Chat routes
chatRoutes := router.Group("/chat")
chatRoutes.Use(infrastructure.OfflinePackMiddleware("assets"), infrastructure.ResourcesMiddleware("assets"))
{
{
chatRoutes.POST("/compose", ChtCtrl.ComposeCardController)
chatRoutes.POST("/risk_check", ChtCtrl.RiskCheckController)
chatRoutes.POST("/intent_mapping", ChtCtrl.IntentMappingController)
chatRoutes.GET("/resources", ChtCtrl.ResourceController)
chatRoutes.GET("/offline-pack", ChtCtrl.OfflinePackController)
}

// Run the app
router.Run();
router.Run()
}
65 changes: 0 additions & 65 deletions Infrastructure/middleware.go

This file was deleted.

22 changes: 0 additions & 22 deletions assets/resources/region/ET.en.json

This file was deleted.

30 changes: 30 additions & 0 deletions assets/resources/region/ET.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"region": "ET",
"resources": [
{
"type": "hotline",
"name": "Ethiopian Lifeline",
"contact": {
"phone": "+251-800-123-456",
"availability": "24/7",
"website": null,
"email": null
}
},
{
"type": "ngo",
"name": "Mental Health Support Ethiopia",
"contact": {
"phone": null,
"availability": null,
"website": "https://mhs-et.org",
"email": "info@mhs-et.org"
}
}
],
"safety_plan": [
{ "step": 1, "instruction": "Identify a safe place." },
{ "step": 2, "instruction": "List 3 trusted contacts." },
{ "step": 3, "instruction": "Keep emergency numbers nearby." }
]
}