12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package store
- import (
- "context"
- "fmt"
- "git.linuxforward.com/byom/byom-core/common"
- "git.linuxforward.com/byom/byom-core/errors"
- "github.com/google/uuid"
- "gorm.io/gorm"
- )
- //CRUD methods for the profile
- //a profile can be attached to a workspace
- //a workspace can have multiple profiles
- // CreateProfile creates a new profile
- func (s *DataStore) CreateProfile(ctx context.Context, p *common.Profile) error {
- result := s.db.Create(p)
- if result.Error != nil {
- return fmt.Errorf("create profile: %w", result.Error)
- }
- return nil
- }
- func (s *DataStore) GetProfile(ctx context.Context, id string) (*common.Profile, error) {
- var profile common.Profile
- result := s.db.Where("id = ?", id).First(&profile)
- if result.Error != nil {
- if result.Error == gorm.ErrRecordNotFound {
- return nil, errors.NewNotFoundError("Profile", id)
- }
- return nil, fmt.Errorf("get profile: %w", result.Error)
- }
- return &profile, nil
- }
- // UpdateProfile updates a profile
- func (s *DataStore) UpdateProfile(ctx context.Context, p *common.Profile) error {
- result := s.db.Save(p)
- if result.Error != nil {
- return fmt.Errorf("update profile: %w", result.Error)
- }
- return nil
- }
- // DeleteProfile deletes a profile
- func (s *DataStore) DeleteProfile(ctx context.Context, id string) error {
- result := s.db.Delete(&common.Profile{}, id)
- if result.Error != nil {
- return fmt.Errorf("delete profile: %w", result.Error)
- }
- return nil
- }
- // GetProfiles gets all profiles
- func (s *DataStore) GetProfiles(ctx context.Context) ([]common.Profile, error) {
- var profiles []common.Profile
- result := s.db.Find(&profiles)
- if result.Error != nil {
- return nil, fmt.Errorf("get profiles: %w", result.Error)
- }
- return profiles, nil
- }
- // GetProfilesByWorkspaceID gets all profiles by workspace ID
- func (s *DataStore) GetProfilesByWorkspaceID(ctx context.Context, workspaceID string) ([]common.Profile, error) {
- var profiles []common.Profile
- result := s.db.Where("workspace_id = ?", workspaceID).Find(&profiles)
- if result.Error != nil {
- return nil, fmt.Errorf("get profiles by workspace ID: %w", result.Error)
- }
- return profiles, nil
- }
- // AttachProfileToWorkspace attaches a profile to a workspace
- func (s *DataStore) AttachProfileToWorkspace(ctx context.Context, profileID, workspaceID uuid.UUID) error {
- err := s.db.Model(&common.Profile{ID: profileID}).
- Association("Workspaces").
- Append(&common.Workspace{ID: workspaceID})
- if err != nil {
- return fmt.Errorf("attach profile to workspace: %w", err)
- }
- return nil
- }
|