package repository import ( "context" "gorm.io/gorm" "github.com/gochat/gochat/internal/model" ) // CsatTemplateRepo implements GORM repository for CsatTemplate. // Reference: Chatwoot app/models/csat_template.rb — singular resource per inbox type CsatTemplateRepo struct { db *gorm.DB } // NewCsatTemplateRepo creates a new CsatTemplate repository. func NewCsatTemplateRepo(db *gorm.DB) *CsatTemplateRepo { return &CsatTemplateRepo{db: db} } func (r *CsatTemplateRepo) DB() *gorm.DB { return r.db } // Create inserts a new CSAT template. func (r *CsatTemplateRepo) Create(ctx context.Context, template *model.CsatTemplate) error { return r.db.WithContext(ctx).Create(template).Error } // FindByInbox retrieves the CSAT template for a specific inbox. // Since csat_template is a singular resource per inbox, this returns the first (and typically only) template. func (r *CsatTemplateRepo) FindByInbox(ctx context.Context, inboxID uint) (*model.CsatTemplate, error) { var template model.CsatTemplate err := r.db.WithContext(ctx).Where("inbox_id = ?", inboxID).First(&template).Error if err != nil { return nil, err } return &template, nil } func (r *CsatTemplateRepo) FindByID(ctx context.Context, id uint) (*model.CsatTemplate, error) { var template model.CsatTemplate err := r.db.WithContext(ctx).First(&template, id).Error if err != nil { return nil, err } return &template, nil } // FindByInboxAndID retrieves a CSAT template by inbox and primary key. func (r *CsatTemplateRepo) FindByInboxAndID(ctx context.Context, inboxID uint, id uint) (*model.CsatTemplate, error) { var template model.CsatTemplate err := r.db.WithContext(ctx).Where("inbox_id = ? AND id = ?", inboxID, id).First(&template).Error if err != nil { return nil, err } return &template, nil } // Update saves changes to an existing CSAT template. func (r *CsatTemplateRepo) Update(ctx context.Context, template *model.CsatTemplate) error { return r.db.WithContext(ctx).Save(template).Error } // Delete removes a CSAT template by primary key. func (r *CsatTemplateRepo) Delete(ctx context.Context, id uint) error { return r.db.WithContext(ctx).Delete(&model.CsatTemplate{}, id).Error }