Untitled
// File: q&a/constant.go package qa const ( CollectionQuestions = "questions" CollectionQuestionOptions = "question_options" CollectionAnswers = "answers" CollectionAnalysis = "analysis" ) // File: q&a/contract.go package qa import "go.mongodb.org/mongo-driver/bson/primitive" type Question struct { ID primitive.ObjectID `bson:"_id" json:"id"` Text string `bson:"text" json:"text"` Tags []string `bson:"tags" json:"tags"` Category string `bson:"category" json:"category"` CreatedAt primitive.DateTime `bson:"created_at" json:"created_at"` UpdatedAt primitive.DateTime `bson:"updated_at" json:"updated_at"` } type QuestionOption struct { ID primitive.ObjectID `bson:"_id" json:"id"` QuestionID primitive.ObjectID `bson:"question_id" json:"question_id"` OptionText string `bson:"option_text" json:"option_text"` CreatedAt primitive.DateTime `bson:"created_at" json:"created_at"` UpdatedAt primitive.DateTime `bson:"updated_at" json:"updated_at"` } type Answer struct { ID primitive.ObjectID `bson:"_id" json:"id"` UserID primitive.ObjectID `bson:"user_id" json:"user_id"` QuestionID primitive.ObjectID `bson:"question_id" json:"question_id"` SelectedOptionIDs []primitive.ObjectID `bson:"selected_option_ids" json:"selected_option_ids"` AnswerText string `bson:"answer" json:"answer"` Attachments []string `bson:"attachments" json:"attachments"` CreatedAt primitive.DateTime `bson:"created_at" json:"created_at"` UpdatedAt primitive.DateTime `bson:"updated_at" json:"updated_at"` EditHistory []EditHistory `bson:"edit_history" json:"edit_history"` AnalysisResult AnalysisResult `bson:"analysis_result" json:"analysis_result"` } type EditHistory struct { EditedAt primitive.DateTime `bson:"edited_at" json:"edited_at"` PreviousAnswer string `bson:"previous_answer" json:"previous_answer"` } type AnalysisResult struct { Score float64 `bson:"score" json:"score"` CategoryInsights string `bson:"category_insights" json:"category_insights"` Tags []string `bson:"tags" json:"tags"` } type Analysis struct { ID primitive.ObjectID `bson:"_id" json:"id"` UserID primitive.ObjectID `bson:"user_id" json:"user_id"` QuestionID primitive.ObjectID `bson:"question_id" json:"question_id"` AnswerID primitive.ObjectID `bson:"answer_id" json:"answer_id"` AnalysisResult AnalysisResult `bson:"analysis_result" json:"analysis_result"` CreatedAt primitive.DateTime `bson:"created_at" json:"created_at"` UpdatedAt primitive.DateTime `bson:"updated_at" json:"updated_at"` } // File: q&a/handler.go package qa import ( "net/http" ) func CreateQuestionHandler(w http.ResponseWriter, r *http.Request) { // Implementation for creating a question } func GetQuestionsHandler(w http.ResponseWriter, r *http.Request) { // Implementation for fetching questions } // Add other handlers as needed // File: q&a/model.go package qa // Duplicate contract.go models as needed for local processing (if any transformations are required) // File: q&a/repo.go package qa import ( "context" "go.mongodb.org/mongo-driver/mongo" ) type Repository struct { DB *mongo.Database } func (r *Repository) CreateQuestion(ctx context.Context, question Question) error { _, err := r.DB.Collection(CollectionQuestions).InsertOne(ctx, question) return err } func (r *Repository) GetQuestions(ctx context.Context) ([]Question, error) { cursor, err := r.DB.Collection(CollectionQuestions).Find(ctx, nil) if err != nil { return nil, err } defer cursor.Close(ctx) var questions []Question if err = cursor.All(ctx, &questions); err != nil { return nil, err } return questions, nil } // Add other repository methods // File: q&a/service.go package qa import "context" type Service struct { Repo *Repository } func (s *Service) CreateQuestion(ctx context.Context, question Question) error { return s.Repo.CreateQuestion(ctx, question) } func (s *Service) GetQuestions(ctx context.Context) ([]Question, error) { return s.Repo.GetQuestions(ctx) } // Add other service methods // File: q&a/view.go package qa import ( "encoding/json" "net/http" ) func RenderJSON(w http.ResponseWriter, data interface{}, statusCode int) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(statusCode) json.NewEncoder(w).Encode(data) }
Leave a Comment