diff --git a/internal/models/contact.go b/internal/models/contact.go index e6608f11..2fb7bece 100644 --- a/internal/models/contact.go +++ b/internal/models/contact.go @@ -13,7 +13,6 @@ type ContactUs struct { ID string `gorm:"type:uuid;primary_key;" json:"id"` Name string `gorm:"type:varchar(100);not null" json:"name" binding:"required" validate:"required"` Email string `gorm:"type:varchar(100);not null;index" json:"email" binding:"required" validate:"required,email"` - Subject string `gorm:"type:varchar(255);not null" json:"subject" binding:"required" validate:"required"` Message string `gorm:"type:text;not null" json:"message" binding:"required" validate:"required"` CreatedAt time.Time `gorm:"type:timestamp;default:current_timestamp" json:"created_at"` UpdatedAt time.Time `gorm:"type:timestamp;default:current_timestamp" json:"updated_at"` diff --git a/internal/models/help_center.go b/internal/models/help_center.go index 05152b0d..35d1e825 100644 --- a/internal/models/help_center.go +++ b/internal/models/help_center.go @@ -8,6 +8,12 @@ import ( "gorm.io/gorm" ) +type HelpCntSummary struct { + ID string `json:"id"` + Title string `json:"title"` + Content string `json:"content"` + Author string `json:"author"` +} type HelpCenter struct { ID string `gorm:"type:uuid; primaryKey" json:"id"` diff --git a/internal/models/notification.go b/internal/models/notification.go index fe137b7c..2917d7ad 100644 --- a/internal/models/notification.go +++ b/internal/models/notification.go @@ -48,7 +48,6 @@ type SendSqueeze struct { type SendContactUsMail struct { Name string `json:"name" validate:"required"` Email string `json:"email" ` - Subject string `son:"subject" validate:"required"` Message string `json:"message" validate:"required"` } diff --git a/services/contact/contact.go b/services/contact/contact.go index 295188a5..93ebb883 100644 --- a/services/contact/contact.go +++ b/services/contact/contact.go @@ -34,7 +34,6 @@ func GetAllContactUs(c *gin.Context, db *gorm.DB) ([]models.ContactUs, *postgres func AddToContactUs(contact *models.ContactUs, db *gorm.DB) error { - contact.Subject = utility.CleanStringInput(contact.Subject) contact.Message = utility.CleanStringInput(contact.Message) if err := contact.CreateContactUs(db); err != nil { @@ -44,7 +43,6 @@ func AddToContactUs(contact *models.ContactUs, db *gorm.DB) error { msgReq := models.ContactUs{ Email: contact.Email, Name: contact.Name, - Subject: contact.Subject, Message: contact.Message, } diff --git a/services/helpcenter/helpcenter.go b/services/helpcenter/helpcenter.go index 62e6fa6d..0d890cc0 100644 --- a/services/helpcenter/helpcenter.go +++ b/services/helpcenter/helpcenter.go @@ -1,4 +1,4 @@ -package service +package helpcenter import ( @@ -9,13 +9,6 @@ import ( "gorm.io/gorm" ) -type HelpCntSummary struct { - ID string `json:"id"` - Title string `json:"title"` - Content string `json:"content"` - Author string `json:"author"` -} - func CreateHelpCenterTopic(req models.CreateHelpCenter, db *gorm.DB) (models.HelpCenter, error) { helpCnt := models.HelpCenter{ ID: utility.GenerateUUID(), @@ -33,21 +26,21 @@ func CreateHelpCenterTopic(req models.CreateHelpCenter, db *gorm.DB) (models.Hel return helpCnt, nil } -func GetPaginatedTopics(c *gin.Context, db *gorm.DB) ([]HelpCntSummary, postgresql.PaginationResponse, error) { +func GetPaginatedTopics(c *gin.Context, db *gorm.DB) ([]models.HelpCntSummary, postgresql.PaginationResponse, error) { helpCnt := models.HelpCenter{} - helpCnts, paginationResponse, err := helpCnt.FetchAllTopics(db, c) + topics, paginationResponse, err := helpCnt.FetchAllTopics(db, c) if err != nil { return nil, paginationResponse, err } - if len(helpCnts) == 0 { - return nil, paginationResponse, gorm.ErrRecordNotFound + if len(topics) == 0 { + return []models.HelpCntSummary{}, paginationResponse, nil } - var topicSummaries []HelpCntSummary - for _, Hlp := range helpCnts { - summary := HelpCntSummary{ + var topicSummaries []models.HelpCntSummary + for _, Hlp := range topics { + summary := models.HelpCntSummary{ ID: Hlp.ID, Title: Hlp.Title, Content: Hlp.Content, @@ -69,7 +62,7 @@ func FetchTopicByID(db *gorm.DB, id string) (models.HelpCenter, error) { return helpCnt, nil } -func SearchHelpCenterTopics(c *gin.Context, db *gorm.DB, query string) ([]HelpCntSummary, postgresql.PaginationResponse, error) { +func SearchHelpCenterTopics(c *gin.Context, db *gorm.DB, query string) ([]models.HelpCntSummary, postgresql.PaginationResponse, error) { var helpCnt models.HelpCenter topics, paginationResponse, err := helpCnt.SearchHelpCenterTopics(db, c, query) @@ -78,12 +71,12 @@ func SearchHelpCenterTopics(c *gin.Context, db *gorm.DB, query string) ([]HelpCn } if len(topics) == 0 { - return nil, paginationResponse, gorm.ErrRecordNotFound + return []models.HelpCntSummary{}, paginationResponse, nil } - var topicSummaries []HelpCntSummary + var topicSummaries []models.HelpCntSummary for _, topic := range topics { - summary := HelpCntSummary{ + summary := models.HelpCntSummary{ ID: topic.ID, Title: topic.Title, Content: topic.Content, diff --git a/services/send/email.go b/services/send/email.go index 298f53ea..2da3519b 100644 --- a/services/send/email.go +++ b/services/send/email.go @@ -1,6 +1,7 @@ package send import ( + "crypto/tls" "fmt" "net/smtp" "strings" @@ -111,20 +112,73 @@ func (e *EmailRequest) sendEmailViaSMTP() error { sender := mailConfig.Username subject := e.Subject + From := "telex@hng.email" recipients := e.To mime := "\nMIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n" - body := []byte(subject + mime + e.Body) + body := []byte(fmt.Sprintf("From: %s\r\nTo: %s\r\n%s%s%s", From, recipients[0], subject, mime, e.Body)) - err := smtp.SendMail( + conn, err := tls.Dial( + "tcp", mailConfig.Server+":"+mailConfig.Port, - auth, - sender, - recipients, - body, - ) + &tls.Config{ + InsecureSkipVerify: false, + ServerName: mailConfig.Server, + }) + + if err != nil { + + return fmt.Errorf("failed to connect to the server: %v", err) + + } + + defer conn.Close() + + client, err := smtp.NewClient(conn, mailConfig.Server) if err != nil { - return fmt.Errorf("error connecting to SMTP server: %w", err) + + return fmt.Errorf("failed to create SMTP client: %v", err) + } + + defer client.Quit() + + if err = client.Auth(auth); err != nil { + return fmt.Errorf("failed to authenticate: %v", err) + + } + + if err = client.Mail(sender); err != nil { + return fmt.Errorf("failed to set the sender: %v", err) + + } + + if err = client.Rcpt(recipients[0]); err != nil { + return fmt.Errorf("failed to set the recipient: %v", err) + + } + + writer, err := client.Data() + if err != nil { + + return fmt.Errorf("failed to write the message: %v", err) + + } + + _, err = writer.Write(body) + if err != nil { + + return fmt.Errorf("failed to send the message: %v", err) + + } + + err = writer.Close() + if err != nil { + + return fmt.Errorf("failed to close the writer: %v", err) + + } + return nil + } diff --git a/tests/test_categories/category_test.go b/tests/test_categories/category_test.go index c9b68a71..ac503663 100644 --- a/tests/test_categories/category_test.go +++ b/tests/test_categories/category_test.go @@ -73,7 +73,6 @@ func TestGetCategoryNames(t *testing.T) { t.Fatalf("Could not parse response: %v", err) } - assert.Equal(t, "success", response["status"]) assert.Equal(t, float64(200), response["status_code"]) assert.Equal(t, "Categories fetched successfully", response["message"]) diff --git a/tests/test_contact/create_test.go b/tests/test_contact/create_test.go index 3b72d1e1..a6b31434 100644 --- a/tests/test_contact/create_test.go +++ b/tests/test_contact/create_test.go @@ -54,7 +54,6 @@ func TestAddToContactUs(t *testing.T) { contactData := models.ContactUs{ Name: "John Doe", Email: "johndoe@example.com", - Subject: "
Inquiry about services3 with html", Message: "I would like to know more about your services3.", } payload, _ := json.Marshal(contactData) @@ -115,7 +114,6 @@ func TestAddToContactUs(t *testing.T) { contactData := models.ContactUs{ Name: "John Doe", Email: "invalid_email", - Subject: "test subject", Message: "message test", } payload, _ := json.Marshal(contactData) diff --git a/tests/test_contact/delete_test.go b/tests/test_contact/delete_test.go index 689d754c..bf7f0c0f 100644 --- a/tests/test_contact/delete_test.go +++ b/tests/test_contact/delete_test.go @@ -40,7 +40,6 @@ func TestDeleteContactUs(t *testing.T) { contact := models.ContactUs{ ID: utility.GenerateUUID(), Email: fmt.Sprintf("contact%v@qa.team", currUUID), - Subject: fmt.Sprintf("Test subject - %v ", currUUID), Message: fmt.Sprintf("Test message - %v ", currUUID), } diff --git a/tests/test_contact/get_test.go b/tests/test_contact/get_test.go index 32a25042..03a4f953 100644 --- a/tests/test_contact/get_test.go +++ b/tests/test_contact/get_test.go @@ -40,13 +40,11 @@ func TestGetAllContactUs(t *testing.T) { contact1 := models.ContactUs{ ID: utility.GenerateUUID(), Email: fmt.Sprintf("contact%v@qa.team", currUUID), - Subject: fmt.Sprintf("First subject - %v ", currUUID), Message: fmt.Sprintf("First test message - %v ", currUUID), } contact2 := models.ContactUs{ ID: utility.GenerateUUID(), Email: fmt.Sprintf("contact2%v@qa.team", currUUID), - Subject: fmt.Sprintf("Second subject - %v ", currUUID), Message: fmt.Sprintf("Second test message - %v ", currUUID), } @@ -149,7 +147,6 @@ func TestGetContactUsById(t *testing.T) { contact := models.ContactUs{ ID: utility.GenerateUUID(), Email: fmt.Sprintf("contact%v@qa.team", currUUID), - Subject: fmt.Sprintf("Test subject - %v ", currUUID), Message: fmt.Sprintf("Test message - %v ", currUUID), } @@ -251,7 +248,6 @@ func TestGetContactUsByEmail(t *testing.T) { contact := models.ContactUs{ ID: utility.GenerateUUID(), Email: fmt.Sprintf("contact%v@qa.team", currUUID), - Subject: fmt.Sprintf("Test subject - %v ", currUUID), Message: fmt.Sprintf("Test message - %v ", currUUID), } diff --git a/tests/test_users/get_user_privacy_test.go b/tests/test_users/get_user_privacy_test.go index 2ebf4188..8c656ac1 100644 --- a/tests/test_users/get_user_privacy_test.go +++ b/tests/test_users/get_user_privacy_test.go @@ -79,7 +79,6 @@ func TestGetUserDataPrivacy(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusOK) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "success") tests.AssertResponseMessage(t, response["message"].(string), "User data privacy settings retrieved successfully") }) @@ -134,7 +133,6 @@ func TestGetUserDataPrivacy(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusNotFound) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "error") tests.AssertResponseMessage(t, response["message"].(string), "user not found") }) } diff --git a/tests/test_users/get_user_region_test.go b/tests/test_users/get_user_region_test.go index 9145a5d0..894f4212 100644 --- a/tests/test_users/get_user_region_test.go +++ b/tests/test_users/get_user_region_test.go @@ -75,7 +75,6 @@ func TestGetUserRegion(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusOK) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "success") tests.AssertResponseMessage(t, response["message"].(string), "User region retrieved successfully") }) @@ -131,7 +130,6 @@ func TestGetUserRegion(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusNotFound) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "error") tests.AssertResponseMessage(t, response["message"].(string), "user not found") }) } diff --git a/tests/test_users/update_user_privacy_test.go b/tests/test_users/update_user_privacy_test.go index 6c864283..f25b7d53 100644 --- a/tests/test_users/update_user_privacy_test.go +++ b/tests/test_users/update_user_privacy_test.go @@ -92,7 +92,6 @@ func TestUpdateUserDataPrivacy(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusOK) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "success") tests.AssertResponseMessage(t, response["message"].(string), "User data privacy settings updated successfully") }) @@ -124,7 +123,6 @@ func TestUpdateUserDataPrivacy(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusOK) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "success") tests.AssertResponseMessage(t, response["message"].(string), "User data privacy settings updated successfully") }) @@ -181,7 +179,6 @@ func TestUpdateUserDataPrivacy(t *testing.T) { tests.AssertStatusCode(t, resp.Code, http.StatusNotFound) response := tests.ParseResponse(resp) - tests.AssertResponseMessage(t, response["status"].(string), "error") tests.AssertResponseMessage(t, response["message"].(string), "user not found") }) } diff --git a/utility/response.go b/utility/response.go index 9e24e617..1ee5a5a9 100644 --- a/utility/response.go +++ b/utility/response.go @@ -49,7 +49,6 @@ func ResponseMessage(code int, status string, name string, message string, err i res := Response{ StatusCode: code, Name: name, - Status: status, Message: message, Error: err, Data: data,