package repository import ( "bugulma/backend/internal/domain" "context" "gorm.io/gorm" ) // ProposalRepository implements domain.ProposalRepository type ProposalRepository struct { db *gorm.DB } // NewProposalRepository creates a new proposal repository func NewProposalRepository(db *gorm.DB) domain.ProposalRepository { return &ProposalRepository{db: db} } // Create creates a new proposal func (r *ProposalRepository) Create(ctx context.Context, proposal *domain.Proposal) error { return r.db.WithContext(ctx).Create(proposal).Error } // GetByID retrieves a proposal by ID func (r *ProposalRepository) GetByID(ctx context.Context, id string) (*domain.Proposal, error) { var proposal domain.Proposal err := r.db.WithContext(ctx).Where("id = ?", id).First(&proposal).Error if err != nil { return nil, err } return &proposal, nil } // GetAll retrieves all proposals func (r *ProposalRepository) GetAll(ctx context.Context) ([]*domain.Proposal, error) { var proposals []*domain.Proposal err := r.db.WithContext(ctx).Order("created_at DESC").Find(&proposals).Error return proposals, err } // GetByOrganizationID retrieves proposals where organization is sender or receiver func (r *ProposalRepository) GetByOrganizationID(ctx context.Context, orgID string) ([]*domain.Proposal, error) { var proposals []*domain.Proposal err := r.db.WithContext(ctx). Where("from_org_id = ? OR to_org_id = ?", orgID, orgID). Order("created_at DESC"). Find(&proposals).Error return proposals, err } // UpdateStatus updates the status of a proposal func (r *ProposalRepository) UpdateStatus(ctx context.Context, id string, status domain.ProposalStatus) error { return r.db.WithContext(ctx). Model(&domain.Proposal{}). Where("id = ?", id). Update("status", status). Error } // Delete deletes a proposal func (r *ProposalRepository) Delete(ctx context.Context, id string) error { return r.db.WithContext(ctx).Where("id = ?", id).Delete(&domain.Proposal{}).Error }