github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/sqlstore/upload_session_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package sqlstore 5 6 import ( 7 "database/sql" 8 9 sq "github.com/Masterminds/squirrel" 10 "github.com/pkg/errors" 11 12 "github.com/mattermost/mattermost-server/v5/model" 13 "github.com/mattermost/mattermost-server/v5/store" 14 ) 15 16 type SqlUploadSessionStore struct { 17 *SqlStore 18 } 19 20 func newSqlUploadSessionStore(sqlStore *SqlStore) store.UploadSessionStore { 21 s := &SqlUploadSessionStore{ 22 SqlStore: sqlStore, 23 } 24 for _, db := range sqlStore.GetAllConns() { 25 table := db.AddTableWithName(model.UploadSession{}, "UploadSessions").SetKeys(false, "Id") 26 table.ColMap("Id").SetMaxSize(26) 27 table.ColMap("Type").SetMaxSize(32) 28 table.ColMap("UserId").SetMaxSize(26) 29 table.ColMap("ChannelId").SetMaxSize(26) 30 table.ColMap("Filename").SetMaxSize(256) 31 table.ColMap("Path").SetMaxSize(512) 32 } 33 return s 34 } 35 36 func (us SqlUploadSessionStore) createIndexesIfNotExists() { 37 us.CreateIndexIfNotExists("idx_uploadsessions_user_id", "UploadSessions", "Type") 38 us.CreateIndexIfNotExists("idx_uploadsessions_create_at", "UploadSessions", "CreateAt") 39 us.CreateIndexIfNotExists("idx_uploadsessions_user_id", "UploadSessions", "UserId") 40 } 41 42 func (us SqlUploadSessionStore) Save(session *model.UploadSession) (*model.UploadSession, error) { 43 if session == nil { 44 return nil, errors.New("SqlUploadSessionStore.Save: session should not be nil") 45 } 46 session.PreSave() 47 if err := session.IsValid(); err != nil { 48 return nil, errors.Wrap(err, "SqlUploadSessionStore.Save: validation failed") 49 } 50 if err := us.GetMaster().Insert(session); err != nil { 51 return nil, errors.Wrap(err, "SqlUploadSessionStore.Save: failed to insert") 52 } 53 return session, nil 54 } 55 56 func (us SqlUploadSessionStore) Update(session *model.UploadSession) error { 57 if session == nil { 58 return errors.New("SqlUploadSessionStore.Update: session should not be nil") 59 } 60 if err := session.IsValid(); err != nil { 61 return errors.Wrap(err, "SqlUploadSessionStore.Update: validation failed") 62 } 63 if _, err := us.GetMaster().Update(session); err != nil { 64 if err == sql.ErrNoRows { 65 return store.NewErrNotFound("UploadSession", session.Id) 66 } 67 return errors.Wrapf(err, "SqlUploadSessionStore.Update: failed to update session with id=%s", session.Id) 68 } 69 return nil 70 } 71 72 func (us SqlUploadSessionStore) Get(id string) (*model.UploadSession, error) { 73 if !model.IsValidId(id) { 74 return nil, errors.New("SqlUploadSessionStore.Get: id is not valid") 75 } 76 query := us.getQueryBuilder(). 77 Select("*"). 78 From("UploadSessions"). 79 Where(sq.Eq{"Id": id}) 80 queryString, args, err := query.ToSql() 81 if err != nil { 82 return nil, errors.Wrap(err, "SqlUploadSessionStore.Get: failed to build query") 83 } 84 var session model.UploadSession 85 if err := us.GetReplica().SelectOne(&session, queryString, args...); err != nil { 86 if err == sql.ErrNoRows { 87 return nil, store.NewErrNotFound("UploadSession", id) 88 } 89 return nil, errors.Wrapf(err, "SqlUploadSessionStore.Get: failed to select session with id=%s", id) 90 } 91 return &session, nil 92 } 93 94 func (us SqlUploadSessionStore) GetForUser(userId string) ([]*model.UploadSession, error) { 95 query := us.getQueryBuilder(). 96 Select("*"). 97 From("UploadSessions"). 98 Where(sq.Eq{"UserId": userId}). 99 OrderBy("CreateAt ASC") 100 queryString, args, err := query.ToSql() 101 if err != nil { 102 return nil, errors.Wrap(err, "SqlUploadSessionStore.GetForUser: failed to build query") 103 } 104 var sessions []*model.UploadSession 105 if _, err := us.GetReplica().Select(&sessions, queryString, args...); err != nil { 106 return nil, errors.Wrap(err, "SqlUploadSessionStore.GetForUser: failed to select") 107 } 108 return sessions, nil 109 } 110 111 func (us SqlUploadSessionStore) Delete(id string) error { 112 if !model.IsValidId(id) { 113 return errors.New("SqlUploadSessionStore.Delete: id is not valid") 114 } 115 116 query := us.getQueryBuilder(). 117 Delete("UploadSessions"). 118 Where(sq.Eq{"Id": id}) 119 queryString, args, err := query.ToSql() 120 if err != nil { 121 return errors.Wrap(err, "SqlUploadSessionStore.Delete: failed to build query") 122 } 123 124 if _, err := us.GetMaster().Exec(queryString, args...); err != nil { 125 return errors.Wrap(err, "SqlUploadSessionStore.Delete: failed to delete") 126 } 127 128 return nil 129 }