| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package test
- import (
- "errors"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- // SessionRepository uses gorm.DB for querying the database
- type SessionRepository struct {
- canQuery bool
- sessions []*models.Session
- }
- // NewSessionRepository returns pointer to repo along with the db
- func NewSessionRepository(canQuery bool) repository.SessionRepository {
- return &SessionRepository{canQuery, []*models.Session{}}
- }
- // CreateSession must take in Key, Data, and ExpiresAt as arguments.
- func (repo *SessionRepository) CreateSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- // make sure key doesn't exist
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- return nil, errors.New("Cannot write database")
- }
- }
- sessions := repo.sessions
- sessions = append(sessions, session)
- repo.sessions = sessions
- session.ID = uint(len(repo.sessions))
- return session, nil
- }
- // UpdateSession updates only the Data field using Key as selector.
- func (repo *SessionRepository) UpdateSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- var oldSession *models.Session
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- oldSession = s
- }
- }
- if oldSession != nil {
- oldSession.Data = session.Data
- return oldSession, nil
- }
- return nil, gorm.ErrRecordNotFound
- }
- // DeleteSession deletes a session by Key
- func (repo *SessionRepository) DeleteSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- if int(session.ID-1) >= len(repo.sessions) || repo.sessions[session.ID-1] == nil {
- return nil, gorm.ErrRecordNotFound
- }
- index := int(session.ID - 1)
- repo.sessions[index] = nil
- return session, nil
- }
- // SelectSession returns a session with matching key
- func (repo *SessionRepository) SelectSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- return s, nil
- }
- }
- return nil, gorm.ErrRecordNotFound
- }
|