profile.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package store
  2. import (
  3. "context"
  4. "fmt"
  5. "git.linuxforward.com/byom/byom-core/common"
  6. "git.linuxforward.com/byom/byom-core/errors"
  7. "github.com/google/uuid"
  8. "gorm.io/gorm"
  9. )
  10. //CRUD methods for the profile
  11. //a profile can be attached to a workspace
  12. //a workspace can have multiple profiles
  13. // CreateProfile creates a new profile
  14. func (s *DataStore) CreateProfile(ctx context.Context, p *common.Profile) error {
  15. result := s.db.Create(p)
  16. if result.Error != nil {
  17. return fmt.Errorf("create profile: %w", result.Error)
  18. }
  19. return nil
  20. }
  21. func (s *DataStore) GetProfile(ctx context.Context, id string) (*common.Profile, error) {
  22. var profile common.Profile
  23. result := s.db.Where("id = ?", id).First(&profile)
  24. if result.Error != nil {
  25. if result.Error == gorm.ErrRecordNotFound {
  26. return nil, errors.NewNotFoundError("Profile", id)
  27. }
  28. return nil, fmt.Errorf("get profile: %w", result.Error)
  29. }
  30. return &profile, nil
  31. }
  32. // UpdateProfile updates a profile
  33. func (s *DataStore) UpdateProfile(ctx context.Context, p *common.Profile) error {
  34. result := s.db.Save(p)
  35. if result.Error != nil {
  36. return fmt.Errorf("update profile: %w", result.Error)
  37. }
  38. return nil
  39. }
  40. // DeleteProfile deletes a profile
  41. func (s *DataStore) DeleteProfile(ctx context.Context, id string) error {
  42. result := s.db.Delete(&common.Profile{}, id)
  43. if result.Error != nil {
  44. return fmt.Errorf("delete profile: %w", result.Error)
  45. }
  46. return nil
  47. }
  48. // GetProfiles gets all profiles
  49. func (s *DataStore) GetProfiles(ctx context.Context) ([]common.Profile, error) {
  50. var profiles []common.Profile
  51. result := s.db.Find(&profiles)
  52. if result.Error != nil {
  53. return nil, fmt.Errorf("get profiles: %w", result.Error)
  54. }
  55. return profiles, nil
  56. }
  57. // GetProfilesByWorkspaceID gets all profiles by workspace ID
  58. func (s *DataStore) GetProfilesByWorkspaceID(ctx context.Context, workspaceID string) ([]common.Profile, error) {
  59. var profiles []common.Profile
  60. result := s.db.Where("workspace_id = ?", workspaceID).Find(&profiles)
  61. if result.Error != nil {
  62. return nil, fmt.Errorf("get profiles by workspace ID: %w", result.Error)
  63. }
  64. return profiles, nil
  65. }
  66. // AttachProfileToWorkspace attaches a profile to a workspace
  67. func (s *DataStore) AttachProfileToWorkspace(ctx context.Context, profileID, workspaceID uuid.UUID) error {
  68. err := s.db.Model(&common.Profile{ID: profileID}).
  69. Association("Workspaces").
  70. Append(&common.Workspace{ID: workspaceID})
  71. if err != nil {
  72. return fmt.Errorf("attach profile to workspace: %w", err)
  73. }
  74. return nil
  75. }