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  }