- package Database
-
- import (
- "database/sql"
- "time"
-
- "github.com/gofrs/uuid"
-
- "gorm.io/gorm"
- "gorm.io/gorm/clause"
- )
-
- // FriendRequest Set with Friend being the requestee, and UserID being the requester
- type FriendRequest struct {
- Base
- UserID uuid.UUID `gorm:"type:uuid;column:user_id;not null;" json:"user_id"`
- User User ` json:"user"`
- FriendID string `gorm:"not null" json:"friend_id"` // Stored encrypted
- FriendUsername string ` json:"friend_username"` // Stored encrypted
- FriendImagePath string ` json:"friend_image_path"`
- FriendPublicAsymmetricKey string ` json:"asymmetric_public_key"` // Stored encrypted
- FriendRequestDeviceTokens []FriendRequestDeviceToken ` json:"tokens"`
- SymmetricKey string `gorm:"not null" json:"symmetric_key"` // Stored encrypted
- AcceptedAt sql.NullTime ` json:"accepted_at"`
- CreatedAt time.Time `gorm:"not null" json:"created_at"`
- }
-
- type FriendRequestList []FriendRequest
-
- // GetFriendRequestByID gets friend request
- func GetFriendRequestByID(id string) (FriendRequest, error) {
- var (
- friendRequest FriendRequest
- err error
- )
-
- err = DB.Preload(clause.Associations).
- First(&friendRequest, "id = ?", id).
- Error
-
- return friendRequest, err
- }
-
- // GetFriendRequestsByUserID gets friend request by user id
- func GetFriendRequestsByUserID(userID string, page int, acceptedAt time.Time) ([]FriendRequest, error) {
- var (
- query *gorm.DB
- friends []FriendRequest
- offset int
- err error
- )
-
- offset = page * PageSize
-
- query = DB.Model(FriendRequest{}).
- Preload("FriendRequestDeviceTokens.DeviceToken").
- Where("user_id = ?", userID)
-
- if !acceptedAt.IsZero() {
- query = query.Where("accepted_at > ?", acceptedAt).
- Or("created_at > ?", acceptedAt)
- } else {
- query = query.
- Offset(offset).
- Limit(PageSize)
-
- if page > 0 {
- query = query.Where("accepted_at IS NULL")
- }
- }
-
- err = query.
- Order("created_at DESC").
- Find(&friends).
- Error
-
- return friends, err
- }
-
- // CreateFriendRequest creates friend request
- func (friendRequest *FriendRequest) CreateFriendRequest() error {
- return DB.Session(&gorm.Session{FullSaveAssociations: true}).
- Create(friendRequest).
- Error
- }
-
- // CreateFriendRequests creates multiple friend requests
- func (friendRequest *FriendRequestList) CreateFriendRequests() error {
- return DB.Session(&gorm.Session{FullSaveAssociations: true}).
- Create(friendRequest).
- Error
- }
-
- // UpdateFriendRequest Updates friend request
- func (friendRequest *FriendRequest) UpdateFriendRequest() error {
- return DB.Where("id = ?", friendRequest.ID).
- Updates(friendRequest).
- Error
- }
-
- // DeleteFriendRequest deletes friend request
- func (friendRequest *FriendRequest) DeleteFriendRequest() error {
- return DB.Session(&gorm.Session{FullSaveAssociations: true}).
- Delete(friendRequest).
- Error
- }
-
- func (friendRequest *FriendRequest) AttachDeviceToken(deviceToken DeviceToken, requester bool) error {
- var (
- requestToken FriendRequestDeviceToken
- err error
- )
-
- requestToken = FriendRequestDeviceToken{
- DeviceToken: deviceToken,
- FriendRequestID: friendRequest.ID,
- }
-
- err = DB.Session(&gorm.Session{FullSaveAssociations: true}).
- Create(&requestToken).
- Error
-
- return err
- }
|