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 }