52 lines
1.7 KiB
Go
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
|
|
} |