Documentation
¶
Overview ¶
Package database is the middleware between the app database and the code. All data (de)serialization (save/load) from a persistent database are handled here. Database specific logic should never escape this package.
To use this package you need to apply migrations to the database if needed/wanted, connect to it (using the database data source name from config), and then initialize an instance of AppDatabase from the DB connection.
For example, this code adds a parameter in `webapi` executable for the database data source name (add it to the main.WebAPIConfiguration structure):
DB struct { Filename string `conf:""` }
This is an example on how to migrate the DB and connect to it:
// Start Database logger.Println("initializing database support") db, err := sql.Open("sqlite3", "./foo.db") if err != nil { logger.WithError(err).Error("error opening SQLite DB") return fmt.Errorf("opening SQLite: %w", err) } defer func() { logger.Debug("database stopping") _ = db.Close() }()
Then you can initialize the AppDatabase and pass it to the api package.
Index ¶
Constants ¶
const ( SUCCESS = iota NO_ROWS UNIQUE_FAILED ERROR )
const LIMIT_STREAM = 10
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AppDatabase ¶
type AppDatabase interface { FindUserByUsername(string, ...int) (utils.User, int, error) FindUserByID(int) (utils.User, int, error) CreateUser(string) (int, int, error) UpdateUser(utils.User) (utils.User, int, error) UpdateUsername(int, string) (utils.User, int, error) GetUserStream(int, int) ([]utils.Photo, int, error) GetUserPhotos(int, int) ([]utils.Photo, int, error) CheckIfBanned(int, int) (bool, error) GetBanned(int) ([]utils.User, int, error) BanUser(int, int) (int, error) UnbanUser(int, int) (int, error) FollowUser(int, int) (int, error) UnfollowUser(int, int) (int, error) GetFollowings(int, int) ([]utils.User, int, error) GetFollowers(int, int) ([]utils.User, int, error) CreatePhoto(utils.Photo) (int, int, error) DeletePhoto(int) (int, error) GetPhotoById(int) (utils.Photo, int, error) LikePhoto(int, int) (utils.Like, int, error) UnlikePhoto(int, int) (int, error) GetLikesByPhoto(int, int) ([]utils.Like, int, error) CommentPhoto(utils.Comment) (int, int, error) UncommentPhoto(int, int) (int, error) GetCommentById(int) (utils.Comment, int, error) GetCommentsByPhoto(int, int) ([]utils.Comment, int, error) Ping() error }
AppDatabase is the high level interface for the DB