Untitled
unknown
plain_text
10 months ago
4.9 kB
5
Indexable
// 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)
}
Editor is loading...
Leave a Comment