session.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package gorm
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "github.com/porter-dev/porter/internal/repository"
  5. "gorm.io/gorm"
  6. )
  7. // SessionRepository uses gorm.DB for querying the database
  8. type SessionRepository struct {
  9. db *gorm.DB
  10. }
  11. // NewSessionRepository returns pointer to repo along with the db
  12. func NewSessionRepository(db *gorm.DB) repository.SessionRepository {
  13. return &SessionRepository{db}
  14. }
  15. // CreateSession must take in Key, Data, and ExpiresAt as arguments.
  16. func (s *SessionRepository) CreateSession(session *models.Session) (*models.Session, error) {
  17. if err := s.db.Create(session).Error; err != nil {
  18. return nil, err
  19. }
  20. return session, nil
  21. }
  22. // UpdateSession updates only the Data field using Key as selector.
  23. func (s *SessionRepository) UpdateSession(session *models.Session) (*models.Session, error) {
  24. if err := s.db.Model(session).Where("Key = ?", session.Key).Updates(session).Error; err != nil {
  25. return nil, err
  26. }
  27. return session, nil
  28. }
  29. // DeleteSession deletes a session by Key
  30. func (s *SessionRepository) DeleteSession(session *models.Session) (*models.Session, error) {
  31. if err := s.db.Where("Key = ?", session.Key).Unscoped().Delete(session).Error; err != nil {
  32. return nil, err
  33. }
  34. return session, nil
  35. }
  36. // SelectSession returns a session with matching key
  37. func (s *SessionRepository) SelectSession(session *models.Session) (*models.Session, error) {
  38. if err := s.db.Where("Key = ? AND deleted_at is null", session.Key).First(session).Error; err != nil {
  39. return nil, err
  40. }
  41. return session, nil
  42. }