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

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