github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/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/masterhung0112/hk_server/v5/model" 13 "github.com/masterhung0112/hk_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 table.ColMap("RemoteId").SetMaxSize(26) 33 table.ColMap("ReqFileId").SetMaxSize(26) 34 } 35 return s 36 } 37 38 func (us SqlUploadSessionStore) createIndexesIfNotExists() { 39 us.CreateIndexIfNotExists("idx_uploadsessions_user_id", "UploadSessions", "Type") 40 us.CreateIndexIfNotExists("idx_uploadsessions_create_at", "UploadSessions", "CreateAt") 41 us.CreateIndexIfNotExists("idx_uploadsessions_user_id", "UploadSessions", "UserId") 42 } 43 44 func (us SqlUploadSessionStore) Save(session *model.UploadSession) (*model.UploadSession, error) { 45 if session == nil { 46 return nil, errors.New("SqlUploadSessionStore.Save: session should not be nil") 47 } 48 session.PreSave() 49 if err := session.IsValid(); err != nil { 50 return nil, errors.Wrap(err, "SqlUploadSessionStore.Save: validation failed") 51 } 52 if err := us.GetMaster().Insert(session); err != nil { 53 return nil, errors.Wrap(err, "SqlUploadSessionStore.Save: failed to insert") 54 } 55 return session, nil 56 } 57 58 func (us SqlUploadSessionStore) Update(session *model.UploadSession) error { 59 if session == nil { 60 return errors.New("SqlUploadSessionStore.Update: session should not be nil") 61 } 62 if err := session.IsValid(); err != nil { 63 return errors.Wrap(err, "SqlUploadSessionStore.Update: validation failed") 64 } 65 if _, err := us.GetMaster().Update(session); err != nil { 66 if err == sql.ErrNoRows { 67 return store.NewErrNotFound("UploadSession", session.Id) 68 } 69 return errors.Wrapf(err, "SqlUploadSessionStore.Update: failed to update session with id=%s", session.Id) 70 } 71 return nil 72 } 73 74 func (us SqlUploadSessionStore) Get(id string) (*model.UploadSession, error) { 75 if !model.IsValidId(id) { 76 return nil, errors.New("SqlUploadSessionStore.Get: id is not valid") 77 } 78 query := us.getQueryBuilder(). 79 Select("*"). 80 From("UploadSessions"). 81 Where(sq.Eq{"Id": id}) 82 queryString, args, err := query.ToSql() 83 if err != nil { 84 return nil, errors.Wrap(err, "SqlUploadSessionStore.Get: failed to build query") 85 } 86 var session model.UploadSession 87 if err := us.GetReplica().SelectOne(&session, queryString, args...); err != nil { 88 if err == sql.ErrNoRows { 89 return nil, store.NewErrNotFound("UploadSession", id) 90 } 91 return nil, errors.Wrapf(err, "SqlUploadSessionStore.Get: failed to select session with id=%s", id) 92 } 93 return &session, nil 94 } 95 96 func (us SqlUploadSessionStore) GetForUser(userId string) ([]*model.UploadSession, error) { 97 query := us.getQueryBuilder(). 98 Select("*"). 99 From("UploadSessions"). 100 Where(sq.Eq{"UserId": userId}). 101 OrderBy("CreateAt ASC") 102 queryString, args, err := query.ToSql() 103 if err != nil { 104 return nil, errors.Wrap(err, "SqlUploadSessionStore.GetForUser: failed to build query") 105 } 106 var sessions []*model.UploadSession 107 if _, err := us.GetReplica().Select(&sessions, queryString, args...); err != nil { 108 return nil, errors.Wrap(err, "SqlUploadSessionStore.GetForUser: failed to select") 109 } 110 return sessions, nil 111 } 112 113 func (us SqlUploadSessionStore) Delete(id string) error { 114 if !model.IsValidId(id) { 115 return errors.New("SqlUploadSessionStore.Delete: id is not valid") 116 } 117 118 query := us.getQueryBuilder(). 119 Delete("UploadSessions"). 120 Where(sq.Eq{"Id": id}) 121 queryString, args, err := query.ToSql() 122 if err != nil { 123 return errors.Wrap(err, "SqlUploadSessionStore.Delete: failed to build query") 124 } 125 126 if _, err := us.GetMaster().Exec(queryString, args...); err != nil { 127 return errors.Wrap(err, "SqlUploadSessionStore.Delete: failed to delete") 128 } 129 130 return nil 131 }