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 // }