github.com/litesolutions/justifay-api@v1.0.0-2.0.20220707114139-46f28a909481/model/user.go (about)

     1  package model
     2  
     3  import (
     4  	"database/sql"
     5  	"time"
     6  
     7  	uuid "github.com/google/uuid"
     8  )
     9  
    10  // AuthUser represents data stored in session/context for a user
    11  type AuthUser struct {
    12  	ID       uuid.UUID
    13  	TenantID int32
    14  	Username string
    15  	Email    string
    16  	Role     AccessRole
    17  }
    18  
    19  // User basic definition of a User and its meta
    20  type User struct {
    21  	IDRecord
    22  	Username               string `bun:",notnull,unique"`
    23  	FullName               string
    24  	FirstName              string
    25  	LastName               string
    26  	EmailConfirmed         bool   `bun:"default:false"`
    27  	Country                string `bun:"type:varchar(2)"`
    28  	Member                 bool   `bun:"default:false,notnull"`
    29  	NewsletterNotification bool
    30  	FollowedGroups         []uuid.UUID  `bun:",type:uuid[],array"`
    31  	OwnerOfGroups          []*UserGroup `bun:"rel:has-many"`
    32  	TenantID               int32
    33  	RoleID                 int32
    34  	LastLogin              time.Time
    35  	LastPasswordChange     time.Time
    36  	Password               sql.NullString `bun:"type:varchar(60)"`
    37  	Token                  string
    38  	//	Email                  string `bun:",unique,notnull"`
    39  	// FavoriteTracks []uuid.UUID `bun:",type:uuid[]" pg:",array"`
    40  	// Playlists      []uuid.UUID `bun:",type:uuid[]" pg:",array"`
    41  	// Plays []Track `pg:"many2many:plays"` Payment API
    42  }
    43  
    44  // UpdateLoginDetails updates login related fields
    45  func (u *User) UpdateLoginDetails(token string) {
    46  	u.Token = token
    47  	t := time.Now()
    48  	u.LastLogin = t
    49  }
    50  
    51  //DeleteUser(ctx context.Context, in *UserRequest, opts ...grpc.CallOption) (*Empty, error)
    52  
    53  // Delete deletes a provided User
    54  // func (u *User) Delete(db *bun.DB) (error, string) {
    55  
    56  // 	// ctx context.Context
    57  // 	pgerr := tx.Model(u).
    58  // 		Column("user.followed_groups", "OwnerOfGroups").
    59  // 		WherePK().
    60  // 		Select()
    61  // 	if pgerr != nil {
    62  // 		return pgerr, "user"
    63  // 	}
    64  
    65  // 	//		Column("user.favorite_tracks", "user.followed_groups", "user.playlists", "OwnerOfGroups").
    66  // 	// if len(u.FavoriteTracks) > 0 {
    67  // 	// 	_, pgerr = tx.Exec(`
    68  // 	//     UPDATE tracks
    69  // 	//     SET favorite_of_users = array_remove(favorite_of_users, ?)
    70  // 	//     WHERE id IN (?)
    71  // 	//   `, u.Id, pg.In(u.FavoriteTracks))
    72  // 	// 	if pgerr != nil {
    73  // 	// 		return pgerr, "track"
    74  // 	// 	}
    75  // 	// }
    76  
    77  // 	if len(u.FollowedGroups) > 0 {
    78  // 		_, pgerr = tx.Exec(`
    79  //       UPDATE user_groups
    80  //       SET followers = array_remove(followers, ?)
    81  //       WHERE id IN (?)
    82  //     `, u.ID, pg.In(u.FollowedGroups))
    83  // 		if pgerr != nil {
    84  // 			return pgerr, "user_group"
    85  // 		}
    86  // 	}
    87  
    88  // 	if len(u.OwnerOfGroups) > 0 {
    89  // 		for _, group := range u.OwnerOfGroups {
    90  // 			if pgerr, table := group.Delete(tx); pgerr != nil {
    91  // 				return pgerr, table
    92  // 			}
    93  // 		}
    94  // 	}
    95  
    96  // 	// if len(u.Playlists) > 0 {
    97  // 	// 	for _, playlistId := range u.Playlists {
    98  // 	// 		playlist := &TrackGroup{Id: playlistId}
    99  // 	// 		if pgerr, table := playlist.Delete(tx); pgerr != nil {
   100  // 	// 			return pgerr, table
   101  // 	// 		}
   102  // 	// 	}
   103  // 	// }
   104  
   105  // 	pgerr = tx.Delete(u)
   106  // 	if pgerr != nil {
   107  // 		return pgerr, "user"
   108  // 	}
   109  
   110  // 	return nil, ""
   111  // }
   112  
   113  // FollowGroup causes a User to follow a UserGroup
   114  // func (u *User) FollowGroup(db *pg.DB, userGroupID uuid.UUID) (error, string) {
   115  // 	var table string
   116  // 	tx, err := db.Begin()
   117  // 	if err != nil {
   118  // 		return err, table
   119  // 	}
   120  // 	defer tx.Rollback()
   121  
   122  // 	// Add userGroupID to user FollowedGroups
   123  // 	userGroupIDArr := []uuid.UUID{userGroupID}
   124  // 	_, pgerr := tx.ExecOne(`
   125  //     UPDATE users
   126  //     SET followed_groups = (select array_agg(distinct e) from unnest(followed_groups || ?) e)
   127  //     WHERE id = ?
   128  //   `, pg.Array(userGroupIDArr), u.ID)
   129  // 	if pgerr != nil {
   130  // 		table = "user"
   131  // 		return pgerr, table
   132  // 	}
   133  
   134  // 	// Add userID to userGroup Followers
   135  // 	userIDArr := []uuid.UUID{u.ID}
   136  // 	_, pgerr = tx.ExecOne(`
   137  //     UPDATE user_groups
   138  //     SET followers = (select array_agg(distinct e) from unnest(followers || ?) e)
   139  //     WHERE id = ?
   140  //   `, pg.Array(userIDArr), userGroupID)
   141  // 	if pgerr != nil {
   142  // 		table = "user_group"
   143  // 		return pgerr, table
   144  // 	}
   145  // 	return tx.Commit(), table
   146  // }
   147  
   148  // // UnfollowGroup removes the follow state of the supplied User from the supplied userGroup via the supplied userGroupID
   149  // func (u *User) UnfollowGroup(db *pg.DB, userGroupID uuid.UUID) (error, string) {
   150  // 	var table string
   151  // 	tx, err := db.Begin()
   152  // 	if err != nil {
   153  // 		return err, table
   154  // 	}
   155  // 	// Rollback tx on error.
   156  // 	defer tx.Rollback()
   157  
   158  // 	// Remove userGroupId from user FollowedGroups
   159  // 	_, pgerr := tx.ExecOne(`
   160  //     UPDATE users
   161  //     SET followed_groups = array_remove(followed_groups, ?)
   162  //     WHERE id = ?
   163  //   `, userGroupID, u.ID)
   164  // 	if pgerr != nil {
   165  // 		table = "user"
   166  // 		return pgerr, table
   167  // 	}
   168  
   169  // 	// Remove userId from track FavoriteOfUsers
   170  // 	_, pgerr = tx.ExecOne(`
   171  //     UPDATE user_groups
   172  //     SET followers = array_remove(followers, ?)
   173  //     WHERE id = ?
   174  //   `, u.ID, userGroupID)
   175  // 	if pgerr != nil {
   176  // 		table = "user_group"
   177  // 		return pgerr, table
   178  // 	}
   179  // 	return tx.Commit(), table
   180  // }
   181  
   182  // func (u *User) RemoveFavoriteTrack(db *pg.DB, trackId uuid.UUID) (error, string) {
   183  // 	var table string
   184  // 	tx, err := db.Begin()
   185  // 	if err != nil {
   186  // 		return err, table
   187  // 	}
   188  // 	// Rollback tx on error.
   189  // 	defer tx.Rollback()
   190  
   191  // 	// Remove trackId from user FavoriteTracks
   192  // 	_, pgerr := tx.ExecOne(`
   193  //     UPDATE users
   194  //     SET favorite_tracks = array_remove(favorite_tracks, ?)
   195  //     WHERE id = ?
   196  //   `, trackId, u.ID)
   197  // 	if pgerr != nil {
   198  // 		table = "user"
   199  // 		return pgerr, table
   200  // 	}
   201  
   202  // 	// Remove userId from track FavoriteOfUsers
   203  // 	_, pgerr = tx.ExecOne(`
   204  //     UPDATE tracks
   205  //     SET favorite_of_users = array_remove(favorite_of_users, ?)
   206  //     WHERE id = ?
   207  //   `, u.Id, trackId)
   208  // 	if pgerr != nil {
   209  // 		table = "track"
   210  // 		return pgerr, table
   211  // 	}
   212  // 	return tx.Commit(), table
   213  // }
   214  
   215  // func (u *User) AddFavoriteTrack(db *pg.DB, trackId uuid.UUID) (error, string) {
   216  // 	var table string
   217  // 	tx, err := db.Begin()
   218  // 	if err != nil {
   219  // 		return err, table
   220  // 	}
   221  // 	// Rollback tx on error.
   222  // 	defer tx.Rollback()
   223  
   224  // 	// Add trackId to user FavoriteTracks
   225  // 	trackIdArr := []uuid.UUID{trackId}
   226  // 	_, pgerr := tx.ExecOne(`
   227  //     UPDATE users
   228  //     SET favorite_tracks = (select array_agg(distinct e) from unnest(favorite_tracks || ?) e)
   229  //     WHERE id = ?
   230  //   `, pg.Array(trackIdArr), u.Id)
   231  // 	// WHERE NOT favorite_tracks @> ?
   232  // 	if pgerr != nil {
   233  // 		table = "user"
   234  // 		return pgerr, table
   235  // 	}
   236  
   237  // 	// Add userId to track FavoriteOfUsers
   238  // 	userIdArr := []uuid.UUID{u.Id}
   239  // 	_, pgerr = tx.ExecOne(`
   240  //     UPDATE tracks
   241  //     SET favorite_of_users = (select array_agg(distinct e) from unnest(favorite_of_users || ?) e)
   242  //     WHERE id = ?
   243  //   `, pg.Array(userIdArr), trackId)
   244  // 	if pgerr != nil {
   245  // 		table = "track"
   246  // 		return pgerr, table
   247  // 	}
   248  // 	return tx.Commit(), table
   249  // }