81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package pg
|
|
|
|
import (
|
|
"gerald/internal/models"
|
|
"github.com/rs/zerolog"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Feedback struct {
|
|
db *gorm.DB
|
|
logger zerolog.Logger
|
|
}
|
|
|
|
func NewFeedback(
|
|
db *gorm.DB,
|
|
logger zerolog.Logger,
|
|
) *Feedback {
|
|
return &Feedback{
|
|
db: db,
|
|
logger: logger.With().Str("package", "pg").Str("service", "feedback").Logger(),
|
|
}
|
|
}
|
|
|
|
func (t *Feedback) Create(ticket *models.Feedback) error {
|
|
return t.db.Create(ticket).Error
|
|
}
|
|
|
|
func (t *Feedback) GetBySessionID(sessionID string) ([]*models.Feedback, error) {
|
|
var tickets []*models.Feedback
|
|
|
|
res := t.db.
|
|
Preload("Upvote").
|
|
Where("session_uuid = ?", sessionID).
|
|
Find(&tickets)
|
|
if res.Error != nil {
|
|
return nil, res.Error
|
|
}
|
|
|
|
return tickets, nil
|
|
}
|
|
|
|
func (t *Feedback) GetByUUID(uuid string) (*models.Feedback, error) {
|
|
var feedback models.Feedback
|
|
|
|
res := t.db.
|
|
Preload("Upvote").
|
|
Where("uuid = ?", uuid).
|
|
First(&feedback)
|
|
if res.Error != nil {
|
|
return nil, res.Error
|
|
}
|
|
|
|
return &feedback, nil
|
|
}
|
|
|
|
func (t *Feedback) GetByProjectID(projectID string) ([]*models.Feedback, error) {
|
|
var feedbacks []*models.Feedback
|
|
|
|
res := t.db.
|
|
Preload("Upvote").
|
|
Where("project_id = ?", projectID).
|
|
Where("type = ?", models.FeedbackTypeFeature).
|
|
Find(&feedbacks)
|
|
if res.Error != nil {
|
|
return nil, res.Error
|
|
}
|
|
|
|
return feedbacks, nil
|
|
}
|
|
|
|
func (t *Feedback) CreateUpvote(upvote *models.Upvote) error {
|
|
return t.db.Create(upvote).Error
|
|
}
|
|
|
|
func (t *Feedback) DeleteUpvoteBySessionIDAndFeedbackUUID(sessionID, feedbackUUID string) error {
|
|
return t.db.
|
|
Where("session_uuid = ?", sessionID).
|
|
Where("feedback_uuid = ?", feedbackUUID).
|
|
Delete(&models.Upvote{}).Error
|
|
}
|