data

package
v0.4.5 Latest Latest
Warning

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

Go to latest
Published: Jul 9, 2022 License: Apache-2.0 Imports: 34 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 added in v0.3.1

func SortFeedbacks(feedback []Feedback)

SortFeedbacks sorts feedback from latest to oldest.

Types

type ClickHouseFeedback added in v0.4.5

type ClickHouseFeedback struct {
	Feedback `gorm:"embedded"`
	Version  time.Time `gorm:"column:version"`
}

func (*ClickHouseFeedback) TableName added in v0.4.5

func (*ClickHouseFeedback) TableName() string

type ClickHouseItem added in v0.4.5

type ClickHouseItem struct {
	SQLItem `gorm:"embedded"`
	Version time.Time `gorm:"column:version"`
}

func NewClickHouseItem added in v0.4.5

func NewClickHouseItem(item Item) (clickHouseItem ClickHouseItem)

func (*ClickHouseItem) TableName added in v0.4.5

func (*ClickHouseItem) TableName() string

type ClickhouseUser added in v0.4.5

type ClickhouseUser struct {
	SQLUser `gorm:"embedded"`
	Version time.Time `gorm:"column:version"`
}

func NewClickhouseUser added in v0.4.5

func NewClickhouseUser(user User) (clickhouseUser ClickhouseUser)

func (*ClickhouseUser) TableName added in v0.4.5

func (*ClickhouseUser) TableName() string

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 `gorm:"embedded"`
	Timestamp   time.Time `gorm:"column:time_stamp"`
	Comment     string    `gorm:"column:comment"`
}

Feedback stores feedback.

type FeedbackKey

type FeedbackKey struct {
	FeedbackType string `gorm:"column:feedback_type"`
	UserId       string `gorm:"column:user_id"`
	ItemId       string `gorm:"column:item_id"`
}

FeedbackKey identifies feedback.

func (*FeedbackKey) TableName added in v0.4.3

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 added in v0.4.3

func (*Item) TableName() string

type ItemPatch added in v0.2.8

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 added in v0.4.0

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 added in v0.2.6

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

BatchInsertItems insert items into MongoDB.

func (*MongoDB) BatchInsertUsers added in v0.2.6

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 added in v0.2.1

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.8

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

ModifyItem modify an item in MongoDB.

func (*MongoDB) ModifyUser added in v0.2.8

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

ModifyUser modify a user in MongoDB.

func (*MongoDB) Optimize added in v0.2.4

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 added in v0.4.0

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 added in v0.2.6

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

BatchInsertItems method of NoDatabase returns ErrNoDatabase.

func (NoDatabase) BatchInsertUsers added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.8

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

func (NoDatabase) ModifyUser added in v0.2.8

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

func (NoDatabase) Optimize added in v0.2.4

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 added in v0.4.0

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 added in v0.2.6

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

BatchInsertItems inserts a batch of items into Redis.

func (*Redis) BatchInsertUsers added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.8

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

ModifyItem modify an item in Redis.

func (*Redis) ModifyUser added in v0.2.8

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

ModifyUser modify a user in Redis.

func (*Redis) Optimize added in v0.2.4

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 added in v0.4.0

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 added in v0.2.6

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

BatchInsertItems inserts a batch of items into MySQL.

func (*SQLDatabase) BatchInsertUsers added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.6

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 added in v0.2.8

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

ModifyItem modify an item in MySQL.

func (*SQLDatabase) ModifyUser added in v0.2.8

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

ModifyUser modify a user in MySQL.

func (*SQLDatabase) Optimize added in v0.2.4

func (d *SQLDatabase) Optimize() error

Optimize is used by ClickHouse only.

type SQLDriver added in v0.2.4

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

type SQLItem added in v0.4.5

type SQLItem struct {
	ItemId     string    `gorm:"column:item_id"`
	IsHidden   bool      `gorm:"column:is_hidden"`
	Categories string    `gorm:"column:categories"`
	Timestamp  time.Time `gorm:"column:time_stamp"`
	Labels     string    `gorm:"column:labels"`
	Comment    string    `gorm:"column:comment"`
}

func NewSQLItem added in v0.4.5

func NewSQLItem(item Item) (sqlItem SQLItem)

func (*SQLItem) TableName added in v0.4.5

func (*SQLItem) TableName() string

type SQLUser added in v0.4.5

type SQLUser struct {
	UserId    string `gorm:"column:user_id"`
	Labels    string `gorm:"column:labels"`
	Subscribe string `gorm:"column:subscribe"`
	Comment   string `gorm:"column:comment"`
}

func NewSQLUser added in v0.4.5

func NewSQLUser(user User) (sqlUser SQLUser)

func (*SQLUser) TableName added in v0.4.5

func (*SQLUser) TableName() string

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 added in v0.4.3

func (*User) TableName() string

type UserPatch added in v0.2.8

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