Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions apps/server/db/query/problem.sql
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,15 @@ LIMIT $1 OFFSET $2;
-- name: CountAllProblems :one
SELECT COUNT(*) FROM problems
WHERE archived_at IS NULL;
-- name: CheckProblemInActiveAssignments :one
SELECT COUNT(*)
FROM assignment_problems ap
JOIN assignments a ON ap.assignment_id = a.id
WHERE ap.problem_id = $1
AND a.status = 'active'
AND a.archived_at IS NULL;

-- name: CheckProblemInAssignmentGroups :one
SELECT COUNT(*)
FROM assignment_group_problems
WHERE problem_id = $1;
2 changes: 1 addition & 1 deletion apps/server/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/coderz-space/coderz.space

go 1.24.3
go 1.25.0

require (
github.com/go-playground/validator/v10 v10.30.1
Expand Down
4 changes: 2 additions & 2 deletions apps/server/internal/db/sqlc/assignment.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions apps/server/internal/db/sqlc/problem.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 18 additions & 2 deletions apps/server/internal/modules/problem/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,24 @@ func (s *Service) UpdateProblem(ctx context.Context, req UpdateProblemRequest, p
}

func (s *Service) DeleteProblem(ctx context.Context, problemID pgtype.UUID) error {
// TODO: Check if problem is referenced by assignments (requires assignment queries)
// For now, just archive the problem
// Check if problem is referenced by active assignments
activeCount, err := s.queries.CheckProblemInActiveAssignments(ctx, problemID)
if err != nil {
return err
}
if activeCount > 0 {
return errors.New("cannot delete problem: referenced by active assignments")
}

// Check if problem is referenced by assignment groups
groupCount, err := s.queries.CheckProblemInAssignmentGroups(ctx, problemID)
if err != nil {
return err
}
if groupCount > 0 {
return errors.New("cannot delete problem: referenced by assignment groups")
}

return s.queries.ArchiveProblem(ctx, problemID)
}

Expand Down
Loading