package repositories import ( "clapclap/internal/models" "clapclap/internal/utils" "log" "clapclap/internal/uuid" "gorm.io/gorm/clause" ) func (r *Repo) CreateProject(project *models.Project) error { if err := r.db.Create(project).Error; err != nil { return err } log.Printf("Project %s created by user %s", project.Name, project.OwnerID) return nil } // GetProjectByID fetches a specific project save func (r *Repo) GetProjectByID(id string, preloads []string) (*models.Project, error) { var project models.Project uid, err := uuid.Parse(id) if err != nil { utils.LogError(err) return nil, err } query := r.db for _, p := range preloads { query = query.Preload(p) } err = query.First(&project, "id = ?", uid).Error return &project, err } // UpdateProject saves the current state func (r *Repo) UpdateProject(project *models.Project) error { // We allow updating Name, Description, Visibility, and JSON content return r.db.Model(project). Select("Name", "Description", "Visibility", "JSONProject", "UpdatedAt"). Updates(project).Error } // GetProjectsByOwnerID fetches only the ROOT projects for a user's dashboard func (r *Repo) GetProjectsByOwnerID(ownerID string, preloads []string) ([]models.Project, error) { var projects []models.Project uid, err := uuid.Parse(ownerID) if err != nil { return nil, err } query := r.db.Where("owner_id = ?", uid) for _, p := range preloads { query = query.Preload(p) } err = query.Find(&projects).Error return projects, err } func (r *Repo) DeleteProject(id string) error { uid, err := uuid.Parse(id) if err != nil { return err } var project models.Project err = r.db.Clauses(clause.Returning{}). Where("id = ?", uid). Delete(&project).Error if err != nil { return err } log.Printf("Project '%s' was deleted", project.Name) return nil } // SearchProjectsByName allows searching the user's projects func (r *Repo) SearchProjectsByName(ownerID string, searchQuery string, preloads []string) ([]models.Project, error) { var projects []models.Project uid, err := uuid.Parse(ownerID) if err != nil { return nil, err } query := r.db. Where("owner_id = ?", uid). // Removed project_id check Where("LOWER(name) LIKE LOWER(?)", "%"+searchQuery+"%") // Case-insensitive search for _, p := range preloads { query = query.Preload(p) } err = query.Find(&projects).Error return projects, err }