From 2c125346ac93fbb1beadcbf414b72c5889cd75f8 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 22:31:35 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A7=B9=20Add=20doubt=20resolver=20org?= =?UTF-8?q?anization=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/db/query/doubt.sql | 15 ++--- apps/server/go.mod | 8 --- apps/server/go.sum | 29 ++-------- .../server/internal/db/sqlc/assignment.sql.go | 4 +- apps/server/internal/db/sqlc/doubt.sql.go | 48 +++++++-------- apps/server/internal/db/sqlc/problem.sql.go | 58 +++++++++---------- apps/server/internal/db/sqlc/querier.go | 6 +- .../internal/modules/progress/service.go | 10 ++-- 8 files changed, 75 insertions(+), 103 deletions(-) diff --git a/apps/server/db/query/doubt.sql b/apps/server/db/query/doubt.sql index 5b7c6cc..f92a12f 100644 --- a/apps/server/db/query/doubt.sql +++ b/apps/server/db/query/doubt.sql @@ -176,13 +176,14 @@ JOIN users u ON om.user_id = u.id JOIN bootcamp_enrollments be ON a.bootcamp_enrollment_id = be.id WHERE be.bootcamp_id = $1 AND d.resolved = FALSE ORDER BY d.created_at ASC; --- name: ValidateDoubtResolverOrg :one + +-- name: CheckResolverInOrganization :one SELECT EXISTS( - SELECT 1 FROM doubts d - JOIN assignment_problems ap ON d.assignment_problem_id = ap.id + SELECT 1 + FROM assignment_problems ap JOIN assignments a ON ap.assignment_id = a.id JOIN bootcamp_enrollments be ON a.bootcamp_enrollment_id = be.id - JOIN organization_members mentee_om ON be.organization_member_id = mentee_om.id - JOIN organization_members resolver_om ON resolver_om.id = sqlc.arg('resolver_member_id') - WHERE d.id = sqlc.arg('doubt_id') AND mentee_om.organization_id = resolver_om.organization_id -) as is_same_org; + JOIN bootcamps b ON be.bootcamp_id = b.id + JOIN organization_members om ON b.organization_id = om.organization_id + WHERE ap.id = sqlc.arg('assignment_problem_id') AND om.id = sqlc.arg('member_id') +); diff --git a/apps/server/go.mod b/apps/server/go.mod index 3a7c049..cda7cf9 100644 --- a/apps/server/go.mod +++ b/apps/server/go.mod @@ -31,24 +31,16 @@ require ( github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/labstack/echo-jwt/v4 v4.3.0 // indirect - github.com/labstack/echo/v4 v4.13.3 // indirect - github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/sv-tools/openapi v0.2.1 // indirect github.com/swaggo/files/v2 v2.0.0 // indirect github.com/swaggo/swag/v2 v2.0.0-rc4 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasttemplate v1.2.2 // indirect go.uber.org/multierr v1.10.0 // indirect golang.org/x/mod v0.31.0 // indirect - golang.org/x/net v0.49.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect golang.org/x/text v0.33.0 // indirect diff --git a/apps/server/go.sum b/apps/server/go.sum index 1600153..0fed999 100644 --- a/apps/server/go.sum +++ b/apps/server/go.sum @@ -51,16 +51,10 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo-jwt/v4 v4.3.0 h1:8JcvVCrK9dRkPx/aWY3ZempZLO336Bebh4oAtBcxAv4= -github.com/labstack/echo-jwt/v4 v4.3.0/go.mod h1:OlWm3wqfnq3Ma8DLmmH7GiEAz2S7Bj23im2iPMEAR+Q= -github.com/labstack/echo-jwt/v5 v5.0.1 h1:uIpCHCiDPN3jA8Jb47i4EViToUl1uypMiPvVAAgKpIw= -github.com/labstack/echo-jwt/v5 v5.0.1/go.mod h1:kcHmJPzrVSEJa1FRheVoi9EJrBLLUqr1ntlil6uPe1Q= -github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= -github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= -github.com/labstack/echo/v5 v5.0.4 h1:ll3I/O8BifjMztj9dD1vx/peZQv8cR2CTUdQK6QxGGc= -github.com/labstack/echo/v5 v5.0.4/go.mod h1:SyvlSdObGjRXeQfCCXW/sybkZdOOQZBmpKF0bvALaeo= -github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= -github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= +github.com/labstack/echo-jwt/v5 v5.0.0 h1:uPp+FpkI/PKpMPPygtnK3RQOpg5a2wlM04UgfpWLVyI= +github.com/labstack/echo-jwt/v5 v5.0.0/go.mod h1:RYF2ojWXbaY09QQ5J9vVtPUtkyI5UztS0gJotmCRz/U= +github.com/labstack/echo/v5 v5.0.3 h1:Jql8sDtCYXrhh2Mbs6jKwjR6r7X8FSQQmch+w6QS7kc= +github.com/labstack/echo/v5 v5.0.3/go.mod h1:SyvlSdObGjRXeQfCCXW/sybkZdOOQZBmpKF0bvALaeo= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -68,11 +62,6 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -101,18 +90,12 @@ github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/swaggo/swag/v2 v2.0.0-rc4 h1:SZ8cK68gcV6cslwrJMIOqPkJELRwq4gmjvk77MrvHvY= github.com/swaggo/swag/v2 v2.0.0-rc4/go.mod h1:Ow7Y8gF16BTCDn8YxZbyKn8FkMLRUHekv1kROJZpbvE= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= -github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= @@ -121,10 +104,6 @@ golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= diff --git a/apps/server/internal/db/sqlc/assignment.sql.go b/apps/server/internal/db/sqlc/assignment.sql.go index c35f580..df5badb 100644 --- a/apps/server/internal/db/sqlc/assignment.sql.go +++ b/apps/server/internal/db/sqlc/assignment.sql.go @@ -262,7 +262,7 @@ func (q *Queries) GetAssignmentGroup(ctx context.Context, id pgtype.UUID) (Assig } const getAssignmentProblem = `-- name: GetAssignmentProblem :one -SELECT ap.id, ap.assignment_id, ap.problem_id, ap.status, ap.solution_link, ap.notes, ap.completed_at, ap.created_at, ap.updated_at, p.title, p.difficulty +SELECT ap.id, ap.assignment_id, ap.problem_id, ap.status, ap.solution_link, ap.notes, ap.completed_at, ap.created_at, ap.updated_at, ap.resources, ap.app_progress_status, p.title, p.difficulty FROM assignment_problems ap JOIN problems p ON ap.problem_id = p.id WHERE ap.assignment_id = $1 AND ap.problem_id = $2 @@ -570,7 +570,7 @@ func (q *Queries) ListAssignmentGroupsByBootcamp(ctx context.Context, arg ListAs } const listAssignmentProblemsStatus = `-- name: ListAssignmentProblemsStatus :many -SELECT ap.id, ap.assignment_id, ap.problem_id, ap.status, ap.solution_link, ap.notes, ap.completed_at, ap.created_at, ap.updated_at, p.title, p.difficulty +SELECT ap.id, ap.assignment_id, ap.problem_id, ap.status, ap.solution_link, ap.notes, ap.completed_at, ap.created_at, ap.updated_at, ap.resources, ap.app_progress_status, p.title, p.difficulty FROM assignment_problems ap JOIN problems p ON ap.problem_id = p.id WHERE ap.assignment_id = $1 diff --git a/apps/server/internal/db/sqlc/doubt.sql.go b/apps/server/internal/db/sqlc/doubt.sql.go index c944359..8b28133 100644 --- a/apps/server/internal/db/sqlc/doubt.sql.go +++ b/apps/server/internal/db/sqlc/doubt.sql.go @@ -11,6 +11,30 @@ import ( "github.com/jackc/pgx/v5/pgtype" ) +const checkResolverInOrganization = `-- name: CheckResolverInOrganization :one +SELECT EXISTS( + SELECT 1 + FROM assignment_problems ap + JOIN assignments a ON ap.assignment_id = a.id + JOIN bootcamp_enrollments be ON a.bootcamp_enrollment_id = be.id + JOIN bootcamps b ON be.bootcamp_id = b.id + JOIN organization_members om ON b.organization_id = om.organization_id + WHERE ap.id = $1 AND om.id = $2 +) +` + +type CheckResolverInOrganizationParams struct { + AssignmentProblemID pgtype.UUID `db:"assignment_problem_id" json:"assignment_problem_id"` + MemberID pgtype.UUID `db:"member_id" json:"member_id"` +} + +func (q *Queries) CheckResolverInOrganization(ctx context.Context, arg CheckResolverInOrganizationParams) (bool, error) { + row := q.db.QueryRow(ctx, checkResolverInOrganization, arg.AssignmentProblemID, arg.MemberID) + var exists bool + err := row.Scan(&exists) + return exists, err +} + const countDoubtsByBootcamp = `-- name: CountDoubtsByBootcamp :one SELECT COUNT(*) FROM doubts d JOIN assignment_problems ap ON d.assignment_problem_id = ap.id @@ -750,27 +774,3 @@ func (q *Queries) ValidateAssignmentProblemOwnership(ctx context.Context, arg Va err := row.Scan(&is_owner) return is_owner, err } - -const validateDoubtResolverOrg = `-- name: ValidateDoubtResolverOrg :one -SELECT EXISTS( - SELECT 1 FROM doubts d - JOIN assignment_problems ap ON d.assignment_problem_id = ap.id - JOIN assignments a ON ap.assignment_id = a.id - JOIN bootcamp_enrollments be ON a.bootcamp_enrollment_id = be.id - JOIN organization_members mentee_om ON be.organization_member_id = mentee_om.id - JOIN organization_members resolver_om ON resolver_om.id = $1 - WHERE d.id = $2 AND mentee_om.organization_id = resolver_om.organization_id -) as is_same_org -` - -type ValidateDoubtResolverOrgParams struct { - ResolverMemberID pgtype.UUID `db:"resolver_member_id" json:"resolver_member_id"` - DoubtID pgtype.UUID `db:"doubt_id" json:"doubt_id"` -} - -func (q *Queries) ValidateDoubtResolverOrg(ctx context.Context, arg ValidateDoubtResolverOrgParams) (bool, error) { - row := q.db.QueryRow(ctx, validateDoubtResolverOrg, arg.ResolverMemberID, arg.DoubtID) - var is_same_org bool - err := row.Scan(&is_same_org) - return is_same_org, err -} diff --git a/apps/server/internal/db/sqlc/problem.sql.go b/apps/server/internal/db/sqlc/problem.sql.go index c926bac..fcfd1c4 100644 --- a/apps/server/internal/db/sqlc/problem.sql.go +++ b/apps/server/internal/db/sqlc/problem.sql.go @@ -68,6 +68,35 @@ func (q *Queries) ArchiveProblem(ctx context.Context, id pgtype.UUID) error { return err } +const checkProblemInActiveAssignments = `-- 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 +` + +func (q *Queries) CheckProblemInActiveAssignments(ctx context.Context, problemID pgtype.UUID) (int64, error) { + row := q.db.QueryRow(ctx, checkProblemInActiveAssignments, problemID) + var count int64 + err := row.Scan(&count) + return count, err +} + +const checkProblemInAssignmentGroups = `-- name: CheckProblemInAssignmentGroups :one +SELECT COUNT(*) +FROM assignment_group_problems +WHERE problem_id = $1 +` + +func (q *Queries) CheckProblemInAssignmentGroups(ctx context.Context, problemID pgtype.UUID) (int64, error) { + row := q.db.QueryRow(ctx, checkProblemInAssignmentGroups, problemID) + var count int64 + err := row.Scan(&count) + return count, err +} + const countAllProblems = `-- name: CountAllProblems :one SELECT COUNT(*) FROM problems WHERE archived_at IS NULL @@ -643,32 +672,3 @@ func (q *Queries) UpdateTag(ctx context.Context, arg UpdateTagParams) (Tag, erro ) return i, err } - -const checkProblemInActiveAssignments = `-- 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 -` - -func (q *Queries) CheckProblemInActiveAssignments(ctx context.Context, problemID pgtype.UUID) (int64, error) { - row := q.db.QueryRow(ctx, checkProblemInActiveAssignments, problemID) - var count int64 - err := row.Scan(&count) - return count, err -} - -const checkProblemInAssignmentGroups = `-- name: CheckProblemInAssignmentGroups :one -SELECT COUNT(*) -FROM assignment_group_problems -WHERE problem_id = $1 -` - -func (q *Queries) CheckProblemInAssignmentGroups(ctx context.Context, problemID pgtype.UUID) (int64, error) { - row := q.db.QueryRow(ctx, checkProblemInAssignmentGroups, problemID) - var count int64 - err := row.Scan(&count) - return count, err -} diff --git a/apps/server/internal/db/sqlc/querier.go b/apps/server/internal/db/sqlc/querier.go index 672af5f..0937b0c 100644 --- a/apps/server/internal/db/sqlc/querier.go +++ b/apps/server/internal/db/sqlc/querier.go @@ -24,6 +24,9 @@ type Querier interface { AssignGroupToMentee(ctx context.Context, arg AssignGroupToMenteeParams) (Assignment, error) CastPollVote(ctx context.Context, arg CastPollVoteParams) (PollVote, error) CheckDuplicateActiveAssignment(ctx context.Context, arg CheckDuplicateActiveAssignmentParams) (int64, error) + CheckProblemInActiveAssignments(ctx context.Context, problemID pgtype.UUID) (int64, error) + CheckProblemInAssignmentGroups(ctx context.Context, problemID pgtype.UUID) (int64, error) + CheckResolverInOrganization(ctx context.Context, arg CheckResolverInOrganizationParams) (bool, error) CheckVoteExists(ctx context.Context, arg CheckVoteExistsParams) (bool, error) ClearAssignmentGroupProblems(ctx context.Context, assignmentGroupID pgtype.UUID) error ClearExpiredRefreshTokens(ctx context.Context) error @@ -31,7 +34,6 @@ type Querier interface { CountAllLeaderboards(ctx context.Context) (int64, error) CountAllOrganizations(ctx context.Context) (int64, error) CountAllPolls(ctx context.Context) (int64, error) - CountProblemAssignments(ctx context.Context, problemID pgtype.UUID) (int64, error) CountAllProblems(ctx context.Context) (int64, error) CountAssignmentGroupsByBootcamp(ctx context.Context, arg CountAssignmentGroupsByBootcampParams) (int64, error) CountAssignments(ctx context.Context, arg CountAssignmentsParams) (int64, error) @@ -160,9 +162,7 @@ type Querier interface { UpdateUser(ctx context.Context, arg UpdateUserParams) (User, error) UpdateUserPassword(ctx context.Context, arg UpdateUserPasswordParams) error UpsertLeaderboardEntry(ctx context.Context, arg UpsertLeaderboardEntryParams) (LeaderboardEntry, error) - CheckResolverSameOrganization(ctx context.Context, arg CheckResolverSameOrganizationParams) (bool, error) ValidateAssignmentProblemOwnership(ctx context.Context, arg ValidateAssignmentProblemOwnershipParams) (bool, error) - ValidateDoubtResolverOrg(ctx context.Context, arg ValidateDoubtResolverOrgParams) (bool, error) } var _ Querier = (*Queries)(nil) diff --git a/apps/server/internal/modules/progress/service.go b/apps/server/internal/modules/progress/service.go index 588e853..81eed9c 100644 --- a/apps/server/internal/modules/progress/service.go +++ b/apps/server/internal/modules/progress/service.go @@ -219,15 +219,15 @@ func (s *Service) ResolveDoubt(ctx context.Context, doubtID, resolvedByMemberID } // Validate resolver belongs to same organization - isSameOrg, err := s.queries.ValidateDoubtResolverOrg(ctx, db.ValidateDoubtResolverOrgParams{ - ResolverMemberID: resolvedByMemberID, - DoubtID: doubtID, + inOrg, err := s.queries.CheckResolverInOrganization(ctx, db.CheckResolverInOrganizationParams{ + AssignmentProblemID: existingDoubt.AssignmentProblemID, + MemberID: resolvedByMemberID, }) if err != nil { return nil, err } - if !isSameOrg { - return nil, errors.New("RESOLVER_NOT_IN_SAME_ORG") + if !inOrg { + return nil, errors.New("RESOLVER_NOT_IN_ORGANIZATION") } // Set resolved to true, resolved_by, resolved_at From 72bae15890c663401336d28e60d28b094a1986c6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 22:40:21 +0000 Subject: [PATCH 2/2] Fix dockerfile Go version --- apps/server/dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/dockerfile b/apps/server/dockerfile index 0fb240b..2454ae2 100644 --- a/apps/server/dockerfile +++ b/apps/server/dockerfile @@ -1,6 +1,6 @@ # Multi-stage build for Go server # Stage 1: Build stage -FROM golang:1.24-alpine AS builder +FROM golang:1.25-alpine AS builder # Install build dependencies RUN apk add --no-cache git make