Untitled

 avatar
unknown
plain_text
a month ago
4.9 kB
3
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)
}
Leave a Comment