From e3d5d4935c0b15b4d7c8a6ed218ec61d0faae4bc Mon Sep 17 00:00:00 2001 From: aspasskiy Date: Sat, 20 Apr 2024 17:37:13 +0300 Subject: [PATCH] update --- deploy/docker-compose.yaml | 4 +-- internal/interfaces/rest/handlers/feedback.go | 31 ++++++++++++++++++- internal/interfaces/rest/serve.go | 17 +++++++--- internal/models/feedback.go | 8 +++-- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 514af8c..08d890b 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -2,7 +2,7 @@ x-custom: &envs SERVING_PORT: 8080 MIGRATION_MODE: "on" LOGGING_LEVEL: debug - POSTGRES_DSN: "host=pg port=2345 dbname=gerald user=gerald password=wR7gP2kD9qLxVzT3mBc sslmode=disable" + POSTGRES_DSN: "host=pg port=5432 dbname=gerald user=gerald password=wR7gP2kD9qLxVzT3mBc sslmode=disable" x-custom-pg: &envs-pg POSTGRES_USER: "gerald" @@ -54,7 +54,7 @@ services: - traefik.http.routers.gerald.entrypoints=websecure - traefik.http.routers.gerald.tls=true - traefik.http.routers.gerald.tls.certresolver=letsEncrypt - - traefik.http.routers.gerald.rule=Host(`api.2phon.com`) || Host(`gerald-srv.octagon-lab.com`) + - traefik.http.routers.gerald.rule=Host(`gerald-srv.octagon-lab.com`) - traefik.http.services.gerald.loadbalancer.server.port=8080 - traefik.http.middlewares.gerald-ratelimit.ratelimit.average=5 - traefik.http.middlewares.gerald-ratelimit.ratelimit.burst=10 diff --git a/internal/interfaces/rest/handlers/feedback.go b/internal/interfaces/rest/handlers/feedback.go index 26faef0..5fa5461 100644 --- a/internal/interfaces/rest/handlers/feedback.go +++ b/internal/interfaces/rest/handlers/feedback.go @@ -1,7 +1,9 @@ package handlers import ( + "gerald/internal/interfaces/rest/models" "gerald/internal/interfaces/rest/restapi/operations/feedback" + dmodels "gerald/internal/models" "gerald/internal/services" "github.com/go-openapi/runtime/middleware" ) @@ -16,7 +18,7 @@ func NewFeedbackHandler( return &FeedbackHandler{feedback: feedback} } -func (h *FeedbackHandler) CreateFeedback(params feedback.CreateFeedbackParams, _ interface{}) middleware.Responder { +func (h *FeedbackHandler) CreateFeedback(params feedback.CreateFeedbackParams) middleware.Responder { err := h.feedback.Create(params.SessionID, params.Body) if err != nil { return feedback.NewCreateFeedbackForbidden() @@ -25,3 +27,30 @@ func (h *FeedbackHandler) CreateFeedback(params feedback.CreateFeedbackParams, _ return feedback.NewCreateFeedbackOK() } + +func (h *FeedbackHandler) GetFeedbacks(params feedback.GetFeedbacksParams) middleware.Responder { + feedbacks, err := h.feedback.GetBySessionID(params.SessionID) + if err != nil { + return feedback.NewGetFeedbacksForbidden() + } + + return feedback.NewGetFeedbacksOK().WithPayload(feedbacksToAPI(feedbacks)) +} + +func feedbacksToAPI(feedbacks []*dmodels.Feedback) []*models.Feedback { + apiFeedbacks := make([]*models.Feedback, 0, len(feedbacks)) + for _, feedback := range feedbacks { + apiFeedbacks = append(apiFeedbacks, feedbackToAPI(feedback)) + } + + return apiFeedbacks +} + +func feedbackToAPI(feedback *dmodels.Feedback) *models.Feedback { + return &models.Feedback{ + ProjectID: feedback.ProjectID, + Text: feedback.Text, + Type: feedback.Type, + UserID: feedback.UserID, + } +} diff --git a/internal/interfaces/rest/serve.go b/internal/interfaces/rest/serve.go index fcb7efc..68bbe71 100644 --- a/internal/interfaces/rest/serve.go +++ b/internal/interfaces/rest/serve.go @@ -4,8 +4,10 @@ import ( "context" "gerald/internal/adapters/config" "gerald/internal/adapters/logger" + "gerald/internal/interfaces/rest/handlers" "gerald/internal/interfaces/rest/restapi" "gerald/internal/interfaces/rest/restapi/operations" + "gerald/internal/interfaces/rest/restapi/operations/feedback" "github.com/go-openapi/loads" "github.com/rs/zerolog" "go.uber.org/fx" @@ -14,18 +16,21 @@ import ( ) type Server struct { - config *config.Config - logger zerolog.Logger + config *config.Config + logger zerolog.Logger + feedback *handlers.FeedbackHandler } func NewServer( config *config.Config, logger zerolog.Logger, + feedback *handlers.FeedbackHandler, ) *Server { return &Server{ - config: config, - logger: logger, + config: config, + logger: logger, + feedback: feedback, } } @@ -42,7 +47,9 @@ func StartHTTPServer(s *Server, lifecycle fx.Lifecycle) { api := operations.NewGeraldAPI(swaggerSpec) api.UseSwaggerUI() - // + // Feedback + api.FeedbackCreateFeedbackHandler = feedback.CreateFeedbackHandlerFunc(s.feedback.CreateFeedback) + api.FeedbackGetFeedbacksHandler = feedback.GetFeedbacksHandlerFunc(s.feedback.GetFeedbacks) // Add global middleware here server := restapi.NewServer(api) diff --git a/internal/models/feedback.go b/internal/models/feedback.go index f54f087..01463a9 100644 --- a/internal/models/feedback.go +++ b/internal/models/feedback.go @@ -3,8 +3,10 @@ package models import "github.com/google/uuid" type Feedback struct { - UUID string `gorm:"primaryKey"` - UserUUID string `gorm:"type:varchar(255)"` + UUID string `gorm:"primaryKey"` + UserID string `gorm:"type:varchar(255)"` + ProjectID string `gorm:"type:varchar(255)"` + SessionUUID string `gorm:"type:varchar(255)"` Type string `gorm:"type:varchar(255)"` @@ -14,7 +16,7 @@ type Feedback struct { func NewFeedback(userUUID, sessionUUID, ticketType, text string) *Feedback { return &Feedback{ UUID: uuid.New().String(), - UserUUID: userUUID, + UserID: userUUID, SessionUUID: sessionUUID, Type: ticketType, Text: text,