profile.go 2.3 KB

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