package domain import "context" type Repository interface { // Contact unique key: owner_uid + source_platform + author_handle UpsertContactByIdentity(ctx context.Context, c *Contact) (*Contact, error) GetContact(ctx context.Context, id string) (*Contact, error) SaveContact(ctx context.Context, c *Contact) error ListContacts(ctx context.Context, ownerUID int64, f ContactListFilter) ([]*Contact, int64, error) CountByStage(ctx context.Context, ownerUID int64) (map[string]int, error) InsertTouch(ctx context.Context, t *ContactTouch) error ListTouches(ctx context.Context, ownerUID int64, contactID string, page, pageSize int) ([]*ContactTouch, int64, error) SaveFollowUp(ctx context.Context, f *FollowUp) error GetFollowUp(ctx context.Context, id string) (*FollowUp, error) ListFollowUps(ctx context.Context, ownerUID int64, f FollowUpListFilter) ([]*FollowUp, int64, error) ListDueFollowUps(ctx context.Context, now int64, limit int) ([]*FollowUp, error) }