Skip to content

fleshing out repository layer #18

@adarshm11

Description

@adarshm11

Build the Repository Layer

internal/core/repositories/repositories.go defines interfaces for AssessmentRepository, QuestionRepository, and TestCaseRepository — but there are zero concrete implementations. The remaining 5 entity interfaces are also missing.

Already done

  • Repository interfaces for Assessment, Question, TestCase (interfaces only, in repositories.go)

Remaining work

1. Add missing interfaces to repositories.go

  • InviteRepository — Create, GetByToken, ListByAssessmentID, UpdateStatus
  • AttemptRepository — Create, GetByID, ListByAssessmentID, UpdateStatus, SetScore, SetCompletedAt
  • AnswerRepository — Upsert, GetByAttemptID, SetScore
  • SubmissionRepository — Create, GetByID, UpdateStatus, UpdateResult
  • SubmissionResultRepository — CreateBatch, GetBySubmissionID

2. Implement all 8 concrete repos

Create one file per repo in internal/core/repositories/ (or a postgres/ sub-package). Each struct takes *sql.DB in its constructor.

  • assessment_repo.go — implements AssessmentRepository (Create, List, GetByID)
  • question_repo.go — implements QuestionRepository (Create, GetByID, ListByAssessmentID)
  • test_case_repo.go — implements TestCaseRepository (CreateMany, ListByQuestionID)
  • invite_repo.go — implements InviteRepository
  • attempt_repo.go — implements AttemptRepository
  • answer_repo.go — implements AnswerRepository (Upsert via INSERT ON CONFLICT)
  • submission_repo.go — implements SubmissionRepository
  • submission_result_repo.go — implements SubmissionResultRepository

Implementation notes

  • Raw SQL with db.QueryRow / db.Query / db.Exec, no ORM
  • JSONB columns use json.RawMessage
  • Wrap "not found" vs real DB errors so callers can distinguish
  • Tables already exist via internal/db/schema.go — match column names there

Note: this requires completion of #17

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions