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 ¶
This section is empty.
Variables ¶
var ( // ErrDatabaseNotInitialized is returned when the database is not initialized. ErrUserNotExists = errors.New("user does not exist") ErrUserExists = errors.New("user already exists") ErrAuthenticationFailed = errors.New("authentication failed: user is not authenticated") ErrPhotoNotExists = errors.New("photo does not exist") ErrFollowerNotPresent = errors.New("user B is not following user A") ErrFollowerAlreadyPresent = errors.New("user B is already following user A") ErrUserCantFollowHimself = errors.New("user can't follow himself") ErrLikeAlreadyPut = errors.New("like already exists") ErrLikeNotPresent = errors.New("like not present") ErrUserCantLikeHimself = errors.New("user can't like its own photo") ErrCommentNotExists = errors.New("comment not exists") ErrBanNotPresent = errors.New("user B didn't ban user A") ErrBanAlreadyPresent = errors.New("user B already banned user A") )
Functions ¶
This section is empty.
Types ¶
type AppDatabase ¶
type AppDatabase interface {
// PROFILE
// if the user does not exist, it will be created and an identifier will be returned.
// If it does exist, the user identifier will be returned.
DoLogin(username string) (string, error)
// Get the user's profile by username
GetUserProfileByUsername(username string) (Profile_db, error)
// Update profile of the user
UpdateUserProfile(updateUsername bool, p Profile_db) (Profile_db, error)
// Delete user profile
DeleteUserProfile(userID string) error
// MEDIA
// Upload a photo on the profile of a specific user
UploadPhoto(userId string, p Photo_db) (Photo_db, error)
// Get a single photo from the profile of a user
GetUserPhoto(photoId string) (Photo_db, error)
// Retrieve collection of photos resources of a certain user
GetListUserPhotos(userId string) ([]Photo_db, error)
// Delete photo from the profile of a specific user. It also removes likes and comments
DeletePhoto(photoId string) error
// COMMENTS
// Comment a photo
CommentPhoto(photoId string, c Comment_db) (Comment_db, error)
// Get list of comments
GetComments(photoId string) ([]Comment_db, error)
// Get single comment
GetSingleComment(commentId string) (Comment_db, error)
// Modify a comment
ModifyComment(c Comment_db) (Comment_db, error)
// Uncomment a photo
UncommentPhoto(commentId string) error
// LIKES
// Put a like to a photo
LikePhoto(photoId string, userId string) error
// Delete a like to a photo
UnlikePhoto(photoId string, userId string) error
// Get likes to a photo
GetLikes(photoId string) ([]Short_profile_db, error)
// FOLLOWERS
// Follow a user
FollowUser(userId string, followerId string) error
// Unfollow a user
UnfollowUser(userId string, followerId string) error
// Get a list of followers of a specific user
GetFollowers(userId string) ([]Short_profile_db, error)
// Get a list of the users the user is following
GetFollowing(userId string) ([]Short_profile_db, error)
// BANS
// Ban a user
BanUser(userId string, followerId string) error
// Unfollow a user
UnbanUser(userId string, followerId string) error
// Get the list of users banned by a specific user
GetBannedUsers(banner_id string) ([]Short_profile_db, error)
// STREAM
// Get the stream of photos of the users we are following in reverse chronological order
GetMyStream(user_id string, offset string) ([]Photo_db, error)
// UTILS
// Get owner of a profile
GetProfileOwner(photo_id string) (string, error)
// Count the number of occurencies of a verb
CountStuffs(filter string, table_name string, filterValue string) uint32
// Convert id and name
GetNameById(userId string) (string, error)
GetIdByName(username string) (string, error)
GetPhotoIdFromCommentId(comment_id string) (string, error)
GetProfilePic(user_id string) (string, error)
// check availability
Ping() error
}
AppDatabase is the high level interface for the DB
type Comment_db ¶
type Comment_db struct {
// Id of the author of the comment
UserId string
// Id of the comment
CommentId string
// Date and time of creation of the comment following RFC3339
Created_in string
// Content of the comment
Body string
// Id of the photo under which the comments are being written
PhotoId string
// Date and time of when the comment was modified following RFC3339
// If it wasn't modified, it coincides with the created_in date
Modified_in string
// States if a comment is a reply to another comment or not
IsReplyComment bool
// Id of the parent comment
ParentId string
}
Attributes of a comment
type Photo_db ¶
type Photo_db struct {
PhotoId string
// Date and time of creation following RFC3339
Timestamp string
// URL of the image just uploaded. | Accepting only http/https URLs and .png/.jpg/.jpeg extensions.
Image string
// A written description or explanation about a photo to provide more context
Caption string
// Id of the user that uploaded the photo
UserId string
}
Attributes of a photo
type Profile_db ¶
type Profile_db struct {
// ID of the user
ID string
// Name of the user
Username string
// URL of the profile picture. Accepting only http/https URLs and .png/.jpg/.jpeg extensions.
ProfilePictureUrl string
// Biography of the profile. Just allowing alphanumeric characters and basic punctuation.
Bio string
}
Represents the information seen in the Profile Page of a user
type Short_profile_db ¶
type Short_profile_db struct {
// Name of the user
Username string
// URL of the profile picture. Accepting only http/https URLs and .png/.jpg/.jpeg extensions.
ProfilePictureUrl string
}
It's shown when viewing list of followers, likers...
Source Files
¶
- ban-user.go
- count-stuffs.go
- database.go
- delete-comment.go
- delete-user.go
- delete_photo.go
- do-login.go
- follow-user.go
- get-banned-users.go
- get-list-comments-photo.go
- get-list-followers.go
- get-list-following.go
- get-list-likes.go
- get-list-photos.go
- get-my-stream.go
- get-profile-by-username.go
- get-profile-owner.go
- get-single-comment.go
- get-single-photo.go
- get-x-by-y.go
- like-a-photo.go
- modify-comment.go
- unban-user.go
- unfollow-user.go
- unlike-a-photo.go
- update-user-profile.go
- upload-a-photo.go
- upload-comment.go