diff --git a/db/query/project.sql b/db/query/project.sql index a233546..b626ade 100644 --- a/db/query/project.sql +++ b/db/query/project.sql @@ -1,11 +1,14 @@ -- name: CreateProject :one -INSERT INTO projects ( - title, description, project_status, user_id -) VALUES ( - $1, $2, $3, $4 +WITH inserted_project AS ( + INSERT INTO projects ( + title, description, project_status, user_id + ) VALUES ( + $1, $2, $3, $4 + ) + RETURNING * ) -RETURNING - *, +SELECT + p.*, json_build_object( 'id', u.id, 'email', u.email, @@ -15,7 +18,10 @@ RETURNING )::json AS user, '[]'::json AS commits, '{}'::uuid[] AS submission_ids, - '[]'::json AS members; + '[]'::json AS members +FROM inserted_project p +JOIN users u ON p.user_id = u.id +LEFT JOIN user_profiles up ON u.id = up.user_id; -- name: GetProjectById :one SELECT diff --git a/internal/gen/sqlc/project.sql.go b/internal/gen/sqlc/project.sql.go index e96702c..6b64989 100644 --- a/internal/gen/sqlc/project.sql.go +++ b/internal/gen/sqlc/project.sql.go @@ -118,13 +118,16 @@ func (q *Queries) CountProjects(ctx context.Context, arg CountProjectsParams) (i } const createProject = `-- name: CreateProject :one -INSERT INTO projects ( - title, description, project_status, user_id -) VALUES ( - $1, $2, $3, $4 +WITH inserted_project AS ( + INSERT INTO projects ( + title, description, project_status, user_id + ) VALUES ( + $1, $2, $3, $4 + ) + RETURNING id, title, description, latest_commit_id, project_status, locked_by, is_deleted, user_id, created_at, updated_at ) -RETURNING - id, title, description, latest_commit_id, project_status, locked_by, is_deleted, user_id, created_at, updated_at, +SELECT + p.id, p.title, p.description, p.latest_commit_id, p.project_status, p.locked_by, p.is_deleted, p.user_id, p.created_at, p.updated_at, json_build_object( 'id', u.id, 'email', u.email, @@ -135,6 +138,9 @@ RETURNING '[]'::json AS commits, '{}'::uuid[] AS submission_ids, '[]'::json AS members +FROM inserted_project p +JOIN users u ON p.user_id = u.id +LEFT JOIN user_profiles up ON u.id = up.user_id ` type CreateProjectParams struct { diff --git a/internal/routes/projectRoute.go b/internal/routes/projectRoute.go index 739976e..d6e4812 100644 --- a/internal/routes/projectRoute.go +++ b/internal/routes/projectRoute.go @@ -79,6 +79,7 @@ func ProjectRoutes( route.Get( "/", + middlewares.JwtAccess(userRepo), middlewares.RequireAnyRole(constants.RoleTypeAdmin, constants.RoleTypeMod), controller.SearchProject, )