package main import ( "context" "atlas9.dev/c/core" "atlas9.dev/c/core/dbi" ) type PendingInvitationStore struct { db dbi.DBI } func NewPendingInvitationStore(db dbi.DBI) *PendingInvitationStore { return &PendingInvitationStore{db: db} } func (s *PendingInvitationStore) Add(ctx context.Context, tenantID core.ID, email string) error { _, err := s.db.Exec(ctx, ` INSERT INTO pending_invitations (tenant_id, email) VALUES ($1, $2) ON CONFLICT (tenant_id, email) DO NOTHING `, tenantID, email) return err } func (s *PendingInvitationStore) ListByEmail(ctx context.Context, email string) ([]core.ID, error) { rows, err := s.db.Query(ctx, ` SELECT tenant_id FROM pending_invitations WHERE email = $1 `, email) if err != nil { return nil, err } defer rows.Close() var ids []core.ID for rows.Next() { var id core.ID if err := rows.Scan(&id); err != nil { return nil, err } ids = append(ids, id) } return ids, rows.Err() } func (s *PendingInvitationStore) Delete(ctx context.Context, tenantID core.ID, email string) error { _, err := s.db.Exec(ctx, ` DELETE FROM pending_invitations WHERE tenant_id = $1 AND email = $2 `, tenantID, email) return err } func (s *PendingInvitationStore) DeleteByEmail(ctx context.Context, email string) error { _, err := s.db.Exec(ctx, ` DELETE FROM pending_invitations WHERE email = $1 `, email) return err }