Files
gochat/internal/repository/captain_inbox_repo.go
T
2026-06-04 15:44:48 +08:00

52 lines
1.7 KiB
Go

package repository
import (
"context"
"github.com/gochat/gochat/internal/model"
"gorm.io/gorm"
)
// CaptainInboxRepo provides data access for the CaptainInbox join table.
type CaptainInboxRepo struct {
db *gorm.DB
}
func NewCaptainInboxRepo(db *gorm.DB) *CaptainInboxRepo {
return &CaptainInboxRepo{db: db}
}
func (r *CaptainInboxRepo) Create(ctx context.Context, ci *model.CaptainInbox) error {
return r.db.WithContext(ctx).Create(ci).Error
}
func (r *CaptainInboxRepo) Delete(ctx context.Context, assistantID, inboxID uint) error {
return r.db.WithContext(ctx).
Where("captain_assistant_id = ? AND inbox_id = ?", assistantID, inboxID).
Delete(&model.CaptainInbox{}).Error
}
func (r *CaptainInboxRepo) ListByAssistant(ctx context.Context, assistantID uint) ([]model.CaptainInbox, error) {
var inboxes []model.CaptainInbox
if err := r.db.WithContext(ctx).Where("captain_assistant_id = ?", assistantID).Find(&inboxes).Error; err != nil {
return nil, err
}
return inboxes, nil
}
func (r *CaptainInboxRepo) FindByAssistantAndInbox(ctx context.Context, assistantID, inboxID uint) (*model.CaptainInbox, error) {
var ci model.CaptainInbox
if err := r.db.WithContext(ctx).Where("captain_assistant_id = ? AND inbox_id = ?", assistantID, inboxID).First(&ci).Error; err != nil {
return nil, err
}
return &ci, nil
}
// FindByInboxID retrieves all CaptainInbox entries for a given inbox.
func (r *CaptainInboxRepo) FindByInboxID(ctx context.Context, inboxID uint) ([]model.CaptainInbox, error) {
var inboxes []model.CaptainInbox
if err := r.db.WithContext(ctx).Where("inbox_id = ?", inboxID).Find(&inboxes).Error; err != nil {
return nil, err
}
return inboxes, nil
}