package store

import "time"

type Store interface {
	UpsertUser(user User)
	GetUser(publicKey string) (User, error)
	CreateChallenge(ch Challenge) error
	GetChallenge(nonce string) (Challenge, error)
	MarkChallengeUsed(nonce string) error
	SaveUserLogin(ul UserLogin)
	SaveSession(session Session)
	GetSession(token string) (Session, error)
	SaveInvitation(inv Invitation) error
	GetInvitation(jti string) (Invitation, error)
	IncrementInvitationUsage(jti string) error
	SaveCollection(c Collection)
	ListCollectionsByOwner(owner string) []Collection
	GetCollection(id string) (Collection, error)
	DeleteCollection(id string) error
	SaveFeature(f Feature)
	ListFeaturesByCollection(collectionID string) []Feature
	ListFeaturesAll() []Feature
	GetFeature(featureID string) (Feature, error)
	DeleteFeature(featureID string) error
	SaveAsset(a Asset)
	GetAsset(assetID string) (Asset, error)
	GetAssetByOwnerChecksumExt(ownerKey, checksum, ext string) (Asset, error)
	SetAssetPublic(assetID string, isPublic bool) error
	LinkAssetToFeature(featureID, assetID, name, description string) error
	UnlinkAssetFromFeature(featureID, assetID string) error
	ListAssetsByFeature(featureID string) []FeatureAsset
	PruneExpired(now time.Time)
}
