thread-master/apps/backend/internal/module/threads/domain/repository.go

30 lines
1.1 KiB
Go

package domain
import "context"
// Repository persists accounts + oauth states.
type Repository interface {
Insert(ctx context.Context, a *Account) error
Update(ctx context.Context, a *Account) error
FindByID(ctx context.Context, id string) (*Account, error)
// FindByOwnerAndThreadsUser returns existing binding for reconnect upsert.
FindByOwnerAndThreadsUser(ctx context.Context, ownerUID int64, threadsUserID string) (*Account, error)
ListByOwner(ctx context.Context, ownerUID int64) ([]*Account, error)
Delete(ctx context.Context, id string) error
SaveState(ctx context.Context, st *OAuthState) error
TakeState(ctx context.Context, state string) (*OAuthState, error) // consume once
}
// Provider abstracts Meta / fake OAuth.
type Provider interface {
// Name for logs
Name() string
// AuthorizeURL builds browser redirect URL for given state.
AuthorizeURL(state, redirectURI string) string
// ExchangeCode trades code for tokens + profile.
ExchangeCode(ctx context.Context, code, redirectURI string) (*TokenPair, error)
// Refresh extends session.
Refresh(ctx context.Context, refreshToken string) (*TokenPair, error)
}