50 lines
2.3 KiB
Go
50 lines
2.3 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models"
|
|
)
|
|
|
|
var (
|
|
ErrChannelExists = errors.New("channel already exists")
|
|
ErrChannelNotFound = errors.New("no channel with that ID found")
|
|
ErrAlreadySubscribed = errors.New("already subscribed to channel")
|
|
ErrVideoExists = errors.New("video already exists")
|
|
ErrUserExists = errors.New("user already exists")
|
|
)
|
|
|
|
// DB represents a database layer for getting video and channel data
|
|
type DB interface {
|
|
// AuthenticateUser verifies a user's password against a hashed value
|
|
AuthenticateUser(ctx context.Context, user models.User) (bool, error)
|
|
// CreateUser registers a new user in the database
|
|
CreateUser(ctx context.Context, user models.User) error
|
|
// DeleteUser registers a new user in the database
|
|
DeleteUser(ctx context.Context, username string) error
|
|
|
|
// CreateChannel starts tracking a new channel and fetch new videos for it
|
|
CreateChannel(ctx context.Context, channel models.Channel) error
|
|
// ListChannels lists all channels from the database
|
|
ListChannels(ctx context.Context) ([]models.Channel, error)
|
|
// GetChannelSubscribers lists all channels from the database
|
|
GetChannelSubscribers(ctx context.Context, channelID string) ([]string, error)
|
|
// SubscribeUserToChannel will start adding new videos from that channel to the user
|
|
SubscribeUserToChannel(ctx context.Context, username string, channelID string) error
|
|
// SubscribeUserToChannel will stop adding videos from that channel to the user
|
|
UnsubscribeUserFromChannel(ctx context.Context, username string, channelID string) error
|
|
|
|
// GetNewVideos returns a list of unwatched videos from all subscribed channels
|
|
GetNewVideos(ctx context.Context, username string) ([]models.Video, error)
|
|
// GetWatchedVideos returns a list of all watched videos for a user
|
|
GetWatchedVideos(ctx context.Context, username string) ([]models.Video, error)
|
|
// AddVideo adds a newly published video to the database
|
|
AddVideo(ctx context.Context, video models.Video, channelID string) error
|
|
// AddVideoToUser will list the video in the users feed
|
|
AddVideoToUser(ctx context.Context, username string, videoID string) error
|
|
// SetVideoWatchTime sets or unsets the watch timestamp of a user's video
|
|
SetVideoWatchTime(ctx context.Context, username string, videoID string, watchTime *time.Time) error
|
|
}
|