package repositories import ( "clapclap/internal/models" "log" "clapclap/internal/uuid" "gorm.io/gorm/clause" ) func (r *Repo) GetAllUploads() ([]models.Upload, error) { var tracks []models.Upload err := r.db.Find(tracks).Error if err != nil { return nil, err } return tracks, err } // Create saves a new track. // Note: Ensure the 'OwnerID' and 'GenreID' are set in the track object. func (r *Repo) CreateUpload(track *models.Upload) error { err := r.db.Create(track).Error if err != nil { return err } log.Printf("Upload record for object %s was created", track.ObjectKey) return err } // GetByID fetches a specific track with full details (Comments). func (r *Repo) GetUploadByObjectKey(objectKey string) (*models.Upload, error) { var trackUpload models.Upload err := r.db. Where(&models.Upload{ObjectKey: objectKey}). First(&trackUpload). Error return &trackUpload, err } // Update modifies track details. func (r *Repo) UpdateUpload(trackUpload *models.Upload) error { // We assume ID is set on the incoming track object if err := r.db.Model(trackUpload).Updates(trackUpload).Error; err != nil { return err } log.Printf("Upload record for object %s was successfully updated", trackUpload.ObjectKey) return nil } // Delete removes a track. func (r *Repo) DeleteUpload(objKey string) error { var track models.Upload err := r.db.Clauses(clause.Returning{}). Where("object_key = ?", objKey). Delete(&track).Error if err != nil { log.Printf("An error occur when trying to delete Upload %s: %s", objKey, err) return err } log.Printf("Upload record for object %s has been deleted", track.ObjectKey) return nil } // GetByOwnerID fetches all tracks uploaded by a specific user. func (r *Repo) GetUploadByOwnerID(ownerID string) ([]models.Upload, error) { var tracks []models.Upload uid, err := uuid.Parse(ownerID) if err != nil { return nil, err } err = r.db. Where("owner_id = ?", uid). Preload("Genre"). Find(&tracks).Error return tracks, err }