data

package
v0.4.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2022 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUserNotExist = errors.NotFoundf("user")
	ErrItemNotExist = errors.NotFoundf("item")
	ErrNoDatabase   = errors.NotAssignedf("database")
)

Functions

func SortFeedbacks

func SortFeedbacks(feedback []Feedback)

SortFeedbacks sorts feedback from latest to oldest.

Types

type Database

type Database interface {
	Init() error
	Close() error
	Optimize() error
	BatchInsertItems(items []Item) error
	BatchGetItems(itemIds []string) ([]Item, error)
	DeleteItem(itemId string) error
	GetItem(itemId string) (Item, error)
	ModifyItem(itemId string, patch ItemPatch) error
	GetItems(cursor string, n int, timeLimit *time.Time) (string, []Item, error)
	GetItemFeedback(itemId string, feedbackTypes ...string) ([]Feedback, error)
	BatchInsertUsers(users []User) error
	DeleteUser(userId string) error
	GetUser(userId string) (User, error)
	ModifyUser(userId string, patch UserPatch) error
	GetUsers(cursor string, n int) (string, []User, error)
	GetUserFeedback(userId string, withFuture bool, feedbackTypes ...string) ([]Feedback, error)
	GetUserItemFeedback(userId, itemId string, feedbackTypes ...string) ([]Feedback, error)
	DeleteUserItemFeedback(userId, itemId string, feedbackTypes ...string) (int, error)
	BatchInsertFeedback(feedback []Feedback, insertUser, insertItem, overwrite bool) error
	GetFeedback(cursor string, n int, timeLimit *time.Time, feedbackTypes ...string) (string, []Feedback, error)
	GetUserStream(batchSize int) (chan []User, chan error)
	GetItemStream(batchSize int, timeLimit *time.Time) (chan []Item, chan error)
	GetFeedbackStream(batchSize int, timeLimit *time.Time, feedbackTypes ...string) (chan []Feedback, chan error)
}

func Open

func Open(path string) (Database, error)

Open a connection to a database.

type Feedback

type Feedback struct {
	FeedbackKey
	Timestamp time.Time
	Comment   string
}

Feedback stores feedback.

type FeedbackKey

type FeedbackKey struct {
	FeedbackType string
	UserId       string
	ItemId       string
}

FeedbackKey identifies feedback.

func (*FeedbackKey) TableName

func (*FeedbackKey) TableName() string

type Item

type Item struct {
	ItemId     string `gorm:"primaryKey"`
	IsHidden   bool
	Categories []string `gorm:"serializer:json"`
	Timestamp  time.Time
	Labels     []string `gorm:"serializer:json"`
	Comment    string
}

Item stores meta data about item.

func (*Item) TableName

func (*Item) TableName() string

type ItemPatch

type ItemPatch struct {
	IsHidden   *bool
	Categories []string
	Timestamp  *time.Time
	Labels     []string
	Comment    *string
}

ItemPatch is the modification on an item.

type MongoDB

type MongoDB struct {
	// contains filtered or unexported fields
}

MongoDB is the data storage based on MongoDB.

func (*MongoDB) BatchGetItems

func (db *MongoDB) BatchGetItems(itemIds []string) ([]Item, error)

func (*MongoDB) BatchInsertFeedback

func (db *MongoDB) BatchInsertFeedback(feedback []Feedback, insertUser, insertItem, overwrite bool) error

BatchInsertFeedback returns multiple feedback into MongoDB.

func (*MongoDB) BatchInsertItems

func (db *MongoDB) BatchInsertItems(items []Item) error

BatchInsertItems insert items into MongoDB.

func (*MongoDB) BatchInsertUsers

func (db *MongoDB) BatchInsertUsers(users []User) error

BatchInsertUsers inserts a user into MongoDB.

func (*MongoDB) Close

func (db *MongoDB) Close() error

Close connection to MongoDB.

func (*MongoDB) CountActiveUsers

func (db *MongoDB) CountActiveUsers(date time.Time) (int, error)

CountActiveUsers returns the number active users starting from a specified date.

func (*MongoDB) DeleteItem

func (db *MongoDB) DeleteItem(itemId string) error

DeleteItem deletes a item from MongoDB.

func (*MongoDB) DeleteUser

func (db *MongoDB) DeleteUser(userId string) error

DeleteUser deletes a user from MongoDB.

func (*MongoDB) DeleteUserItemFeedback

func (db *MongoDB) DeleteUserItemFeedback(userId, itemId string, feedbackTypes ...string) (int, error)

DeleteUserItemFeedback deletes a feedback return the user id and item id from MongoDB.

func (*MongoDB) GetFeedback

func (db *MongoDB) GetFeedback(cursor string, n int, timeLimit *time.Time, feedbackTypes ...string) (string, []Feedback, error)

GetFeedback returns multiple feedback from MongoDB.

func (*MongoDB) GetFeedbackStream

func (db *MongoDB) GetFeedbackStream(batchSize int, timeLimit *time.Time, feedbackTypes ...string) (chan []Feedback, chan error)

GetFeedbackStream reads feedback from MongoDB by stream.

func (*MongoDB) GetItem

func (db *MongoDB) GetItem(itemId string) (item Item, err error)

GetItem returns a item from MongoDB.

func (*MongoDB) GetItemFeedback

func (db *MongoDB) GetItemFeedback(itemId string, feedbackTypes ...string) ([]Feedback, error)

GetItemFeedback returns feedback of a item from MongoDB.

func (*MongoDB) GetItemStream

func (db *MongoDB) GetItemStream(batchSize int, timeLimit *time.Time) (chan []Item, chan error)

GetItemStream read items from MongoDB by stream.

func (*MongoDB) GetItems

func (db *MongoDB) GetItems(cursor string, n int, timeLimit *time.Time) (string, []Item, error)

GetItems returns items from MongoDB.

func (*MongoDB) GetUser

func (db *MongoDB) GetUser(userId string) (user User, err error)

GetUser returns a user from MongoDB.

func (*MongoDB) GetUserFeedback

func (db *MongoDB) GetUserFeedback(userId string, withFuture bool, feedbackTypes ...string) ([]Feedback, error)

GetUserFeedback returns feedback of a user from MongoDB.

func (*MongoDB) GetUserItemFeedback

func (db *MongoDB) GetUserItemFeedback(userId, itemId string, feedbackTypes ...string) ([]Feedback, error)

GetUserItemFeedback returns a feedback return the user id and item id from MongoDB.

func (*MongoDB) GetUserStream

func (db *MongoDB) GetUserStream(batchSize int) (chan []User, chan error)

GetUserStream reads users from MongoDB by stream.

func (*MongoDB) GetUsers

func (db *MongoDB) GetUsers(cursor string, n int) (string, []User, error)

GetUsers returns users from MongoDB.

func (*MongoDB) Init

func (db *MongoDB) Init() error

Init collections and indices in MongoDB.

func (*MongoDB) ModifyItem

func (db *MongoDB) ModifyItem(itemId string, patch ItemPatch) error

ModifyItem modify an item in MongoDB.

func (*MongoDB) ModifyUser

func (db *MongoDB) ModifyUser(userId string, patch UserPatch) error

ModifyUser modify a user in MongoDB.

func (*MongoDB) Optimize

func (db *MongoDB) Optimize() error

Optimize is used by ClickHouse only.

type NoDatabase

type NoDatabase struct{}

NoDatabase means that no database used.

func (NoDatabase) BatchGetItems

func (NoDatabase) BatchGetItems(_ []string) ([]Item, error)

BatchGetItems method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) BatchInsertFeedback

func (NoDatabase) BatchInsertFeedback(_ []Feedback, _, _, _ bool) error

BatchInsertFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) BatchInsertItems

func (NoDatabase) BatchInsertItems(_ []Item) error

BatchInsertItems method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) BatchInsertUsers

func (NoDatabase) BatchInsertUsers(_ []User) error

BatchInsertUsers method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) Close

func (NoDatabase) Close() error

Close method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) DeleteItem

func (NoDatabase) DeleteItem(_ string) error

DeleteItem method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) DeleteUser

func (NoDatabase) DeleteUser(_ string) error

DeleteUser method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) DeleteUserItemFeedback

func (NoDatabase) DeleteUserItemFeedback(_, _ string, _ ...string) (int, error)

DeleteUserItemFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetFeedback

func (NoDatabase) GetFeedback(_ string, _ int, _ *time.Time, _ ...string) (string, []Feedback, error)

GetFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetFeedbackStream

func (NoDatabase) GetFeedbackStream(_ int, _ *time.Time, _ ...string) (chan []Feedback, chan error)

GetFeedbackStream method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetItem

func (NoDatabase) GetItem(_ string) (Item, error)

GetItem method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetItemFeedback

func (NoDatabase) GetItemFeedback(_ string, _ ...string) ([]Feedback, error)

GetItemFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetItemStream

func (NoDatabase) GetItemStream(_ int, _ *time.Time) (chan []Item, chan error)

GetItemStream method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetItems

func (NoDatabase) GetItems(_ string, _ int, _ *time.Time) (string, []Item, error)

GetItems method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetUser

func (NoDatabase) GetUser(_ string) (User, error)

GetUser method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetUserFeedback

func (NoDatabase) GetUserFeedback(_ string, _ bool, _ ...string) ([]Feedback, error)

GetUserFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetUserItemFeedback

func (NoDatabase) GetUserItemFeedback(_, _ string, _ ...string) ([]Feedback, error)

GetUserItemFeedback method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetUserStream

func (NoDatabase) GetUserStream(_ int) (chan []User, chan error)

GetUserStream method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) GetUsers

func (NoDatabase) GetUsers(_ string, _ int) (string, []User, error)

GetUsers method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) Init

func (NoDatabase) Init() error

Init method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) ModifyItem

func (d NoDatabase) ModifyItem(_ string, _ ItemPatch) error

func (NoDatabase) ModifyUser

func (d NoDatabase) ModifyUser(_ string, _ UserPatch) error

func (NoDatabase) Optimize

func (NoDatabase) Optimize() error

Optimize is used by ClickHouse only.

type Redis

type Redis struct {
	// contains filtered or unexported fields
}

Redis use Redis as data storage, but used for test only.

func (*Redis) BatchGetItems

func (r *Redis) BatchGetItems(itemIds []string) ([]Item, error)

func (*Redis) BatchInsertFeedback

func (r *Redis) BatchInsertFeedback(feedback []Feedback, insertUser, insertItem, overwrite bool) error

BatchInsertFeedback insert a batch feedback into Redis. If insertUser set, new users will be insert to user table. If insertItem set, new items will be insert to item table.

func (*Redis) BatchInsertItems

func (r *Redis) BatchInsertItems(items []Item) error

BatchInsertItems inserts a batch of items into Redis.

func (*Redis) BatchInsertUsers

func (r *Redis) BatchInsertUsers(users []User) error

BatchInsertUsers inserts a batch pf user into Redis.

func (*Redis) Close

func (r *Redis) Close() error

Close Redis connection.

func (*Redis) DeleteItem

func (r *Redis) DeleteItem(itemId string) error

DeleteItem deletes a item from Redis.

func (*Redis) DeleteUser

func (r *Redis) DeleteUser(userId string) error

DeleteUser deletes a user from Redis.

func (*Redis) DeleteUserItemFeedback

func (r *Redis) DeleteUserItemFeedback(userId, itemId string, feedbackTypes ...string) (int, error)

DeleteUserItemFeedback deletes a feedback by user id and item id from Redis.

func (*Redis) ForFeedback

func (r *Redis) ForFeedback(ctx context.Context, action func(key, thisFeedbackType, thisUserId, thisItemId string) error) error

func (*Redis) GetFeedback

func (r *Redis) GetFeedback(_ string, _ int, timeLimit *time.Time, feedbackTypes ...string) (string, []Feedback, error)

GetFeedback returns feedback from Redis.

func (*Redis) GetFeedbackStream

func (r *Redis) GetFeedbackStream(batchSize int, timeLimit *time.Time, feedbackTypes ...string) (chan []Feedback, chan error)

GetFeedbackStream reads feedback by stream.

func (*Redis) GetItem

func (r *Redis) GetItem(itemId string) (Item, error)

GetItem get a item from Redis.

func (*Redis) GetItemFeedback

func (r *Redis) GetItemFeedback(itemId string, feedbackTypes ...string) ([]Feedback, error)

GetItemFeedback returns feedback of an item from Redis.

func (*Redis) GetItemStream

func (r *Redis) GetItemStream(batchSize int, timeLimit *time.Time) (chan []Item, chan error)

GetItemStream read items from Redis by stream.

func (*Redis) GetItems

func (r *Redis) GetItems(cursor string, n int, timeLimit *time.Time) (string, []Item, error)

GetItems returns items from Redis.

func (*Redis) GetUser

func (r *Redis) GetUser(userId string) (User, error)

GetUser returns a user from Redis.

func (*Redis) GetUserFeedback

func (r *Redis) GetUserFeedback(userId string, withFuture bool, feedbackTypes ...string) ([]Feedback, error)

GetUserFeedback returns feedback of a user from Redis.

func (*Redis) GetUserItemFeedback

func (r *Redis) GetUserItemFeedback(userId, itemId string, feedbackTypes ...string) ([]Feedback, error)

GetUserItemFeedback gets a feedback by user id and item id from Redis.

func (*Redis) GetUserStream

func (r *Redis) GetUserStream(batchSize int) (chan []User, chan error)

GetUserStream read users from Redis by stream.

func (*Redis) GetUsers

func (r *Redis) GetUsers(cursor string, n int) (string, []User, error)

GetUsers returns users from Redis.

func (*Redis) Init

func (r *Redis) Init() error

Init does nothing.

func (*Redis) ModifyItem

func (r *Redis) ModifyItem(itemId string, patch ItemPatch) error

ModifyItem modify an item in Redis.

func (*Redis) ModifyUser

func (r *Redis) ModifyUser(userId string, patch UserPatch) error

ModifyUser modify a user in Redis.

func (*Redis) Optimize

func (r *Redis) Optimize() error

Optimize is used by ClickHouse only.

type SQLDatabase

type SQLDatabase struct {
	// contains filtered or unexported fields
}

SQLDatabase use MySQL as data storage.

func (*SQLDatabase) BatchGetItems

func (d *SQLDatabase) BatchGetItems(itemIds []string) ([]Item, error)

func (*SQLDatabase) BatchInsertFeedback

func (d *SQLDatabase) BatchInsertFeedback(feedback []Feedback, insertUser, insertItem, overwrite bool) error

BatchInsertFeedback insert a batch feedback into MySQL. If insertUser set, new users will be inserted to user table. If insertItem set, new items will be inserted to item table.

func (*SQLDatabase) BatchInsertItems

func (d *SQLDatabase) BatchInsertItems(items []Item) error

BatchInsertItems inserts a batch of items into MySQL.

func (*SQLDatabase) BatchInsertUsers

func (d *SQLDatabase) BatchInsertUsers(users []User) error

BatchInsertUsers inserts users into MySQL.

func (*SQLDatabase) Close

func (d *SQLDatabase) Close() error

Close MySQL connection.

func (*SQLDatabase) DeleteItem

func (d *SQLDatabase) DeleteItem(itemId string) error

DeleteItem deletes a item from MySQL.

func (*SQLDatabase) DeleteUser

func (d *SQLDatabase) DeleteUser(userId string) error

DeleteUser deletes a user from MySQL.

func (*SQLDatabase) DeleteUserItemFeedback

func (d *SQLDatabase) DeleteUserItemFeedback(userId, itemId string, feedbackTypes ...string) (int, error)

DeleteUserItemFeedback deletes a feedback by user id and item id from MySQL.

func (*SQLDatabase) GetFeedback

func (d *SQLDatabase) GetFeedback(cursor string, n int, timeLimit *time.Time, feedbackTypes ...string) (string, []Feedback, error)

GetFeedback returns feedback from MySQL.

func (*SQLDatabase) GetFeedbackStream

func (d *SQLDatabase) GetFeedbackStream(batchSize int, timeLimit *time.Time, feedbackTypes ...string) (chan []Feedback, chan error)

GetFeedbackStream reads feedback by stream.

func (*SQLDatabase) GetItem

func (d *SQLDatabase) GetItem(itemId string) (Item, error)

GetItem get a item from MySQL.

func (*SQLDatabase) GetItemFeedback

func (d *SQLDatabase) GetItemFeedback(itemId string, feedbackTypes ...string) ([]Feedback, error)

GetItemFeedback returns feedback of a item from MySQL.

func (*SQLDatabase) GetItemStream

func (d *SQLDatabase) GetItemStream(batchSize int, timeLimit *time.Time) (chan []Item, chan error)

GetItemStream reads items by stream.

func (*SQLDatabase) GetItems

func (d *SQLDatabase) GetItems(cursor string, n int, timeLimit *time.Time) (string, []Item, error)

GetItems returns items from MySQL.

func (*SQLDatabase) GetUser

func (d *SQLDatabase) GetUser(userId string) (User, error)

GetUser returns a user from MySQL.

func (*SQLDatabase) GetUserFeedback

func (d *SQLDatabase) GetUserFeedback(userId string, withFuture bool, feedbackTypes ...string) ([]Feedback, error)

GetUserFeedback returns feedback of a user from MySQL.

func (*SQLDatabase) GetUserItemFeedback

func (d *SQLDatabase) GetUserItemFeedback(userId, itemId string, feedbackTypes ...string) ([]Feedback, error)

GetUserItemFeedback gets a feedback by user id and item id from MySQL.

func (*SQLDatabase) GetUserStream

func (d *SQLDatabase) GetUserStream(batchSize int) (chan []User, chan error)

GetUserStream read users by stream.

func (*SQLDatabase) GetUsers

func (d *SQLDatabase) GetUsers(cursor string, n int) (string, []User, error)

GetUsers returns users from MySQL.

func (*SQLDatabase) Init

func (d *SQLDatabase) Init() error

Init tables and indices in MySQL.

func (*SQLDatabase) ModifyItem

func (d *SQLDatabase) ModifyItem(itemId string, patch ItemPatch) error

ModifyItem modify an item in MySQL.

func (*SQLDatabase) ModifyUser

func (d *SQLDatabase) ModifyUser(userId string, patch UserPatch) error

ModifyUser modify a user in MySQL.

func (*SQLDatabase) Optimize

func (d *SQLDatabase) Optimize() error

Optimize is used by ClickHouse only.

type SQLDriver

type SQLDriver int
const (
	MySQL SQLDriver = iota
	Postgres
	ClickHouse
	SQLite
)

type User

type User struct {
	UserId    string   `gorm:"primaryKey"`
	Labels    []string `gorm:"serializer:json"`
	Subscribe []string `gorm:"serializer:json"`
	Comment   string
}

User stores meta data about user.

func (*User) TableName

func (*User) TableName() string

type UserPatch

type UserPatch struct {
	Labels    []string
	Subscribe []string
	Comment   *string
}

UserPatch is the modification on a user.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL