session.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package session
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "gorm.io/gorm"
  5. )
  6. // Repository for testing. Potential TODO: swap out actual functional calls to point to repoitory.
  7. type Repository interface {
  8. CreateSession(db *gorm.DB, session *models.Session) (*models.Session, error)
  9. UpdateSession(db *gorm.DB, session *models.Session) (*models.Session, error)
  10. DeleteSession(db *gorm.DB, session *models.Session) (*models.Session, error)
  11. SelectSession(db *gorm.DB, session *models.Session) (*models.Session, error)
  12. }
  13. // CreateSession must take in Key, Data, and ExpiresAt as arguments.
  14. func CreateSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
  15. // TODO: check for duplicate and return error
  16. if err := db.Create(session).Error; err != nil {
  17. return nil, err
  18. }
  19. return session, nil
  20. }
  21. // UpdateSession updates only the Data field using Key as selector.
  22. func UpdateSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
  23. if err := db.Model(session).Where("Key = ?", session.Key).Updates(session).Error; err != nil {
  24. return nil, err
  25. }
  26. return session, nil
  27. }
  28. // DeleteSession deletes a session by Key
  29. func DeleteSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
  30. if err := db.Where("Key = ?", session.Key).Delete(session).Error; err != nil {
  31. return nil, err
  32. }
  33. return session, nil
  34. }
  35. // SelectSession returns a session with matching key
  36. func SelectSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
  37. if err := db.Where("Key = ?", session.Key).First(session).Error; err != nil {
  38. return nil, err
  39. }
  40. return session, nil
  41. }