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  }