lots of stuff, don't truly remember
This commit is contained in:
66
internal/ai/repository.go
Normal file
66
internal/ai/repository.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package ai
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"rideaware/pkg/database"
|
||||
)
|
||||
|
||||
type Repository struct{}
|
||||
|
||||
func NewRepository() *Repository {
|
||||
return &Repository{}
|
||||
}
|
||||
|
||||
// SaveRecommendation stores the AI recommendation
|
||||
func (r *Repository) SaveRecommendation(
|
||||
userID uint,
|
||||
userCtx UserContext,
|
||||
params GenerateRequest,
|
||||
aiResponse string,
|
||||
generated *GenerateResponse,
|
||||
) (uint, error) {
|
||||
|
||||
contextJSON, _ := json.Marshal(userCtx)
|
||||
paramsJSON, _ := json.Marshal(params)
|
||||
workoutsJSON, _ := json.Marshal(generated.Workouts)
|
||||
|
||||
rec := &AIRecommendation{
|
||||
UserID: userID,
|
||||
PromptContext: JSONB{Data: contextJSON},
|
||||
AIResponse: aiResponse,
|
||||
GeneratedWorkouts: JSONB{Data: workoutsJSON},
|
||||
Parameters: JSONB{Data: paramsJSON},
|
||||
Status: "generated",
|
||||
}
|
||||
|
||||
if err := database.DB.Create(rec).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return rec.ID, nil
|
||||
}
|
||||
|
||||
// GetRecommendation retrieves a recommendation by ID
|
||||
func (r *Repository) GetRecommendation(id uint, userID uint) (*AIRecommendation, error) {
|
||||
var rec AIRecommendation
|
||||
err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&rec).Error
|
||||
return &rec, err
|
||||
}
|
||||
|
||||
// GetUserRecommendations fetches recent recommendations for a user
|
||||
func (r *Repository) GetUserRecommendations(userID uint, limit int) ([]AIRecommendation, error) {
|
||||
var recs []AIRecommendation
|
||||
err := database.DB.Where("user_id = ?", userID).
|
||||
Order("created_at DESC").
|
||||
Limit(limit).
|
||||
Find(&recs).Error
|
||||
return recs, err
|
||||
}
|
||||
|
||||
// UpdateRecommendationStatus marks a recommendation as scheduled/rejected
|
||||
func (r *Repository) UpdateRecommendationStatus(id uint, status string) error {
|
||||
return database.DB.Model(&AIRecommendation{}).
|
||||
Where("id = ?", id).
|
||||
Update("status", status).Error
|
||||
}
|
||||
Reference in New Issue
Block a user