Skip to content

Commit

Permalink
refactor: rewrite get starred query from prisma to kysely
Browse files Browse the repository at this point in the history
  • Loading branch information
IgorGoryany committed Jul 19, 2024
1 parent fe2c92e commit 9d66ea8
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import { ProjectListItem } from '../ProjectListItem/ProjectListItem';
import { TableRowItem, TableRowItemTitle } from '../TableRowItem/TableRowItem';
import { trpc } from '../../utils/trpcClient';
import { CommonHeader } from '../CommonHeader';
import { ActivityByIdReturnType } from '../../../trpc/inferredTypes';

import { tr } from './ExploreProjectsStarredPage.i18n';

export const ExploreProjectsStarredPage = ({ user, ssrTime }: ExternalPageProps) => {
const { data } = trpc.project.getStarred.useQuery();

const { data } = trpc.v2.project.starred.useQuery();
if (!data) return null;

return (
Expand All @@ -29,9 +29,9 @@ export const ExploreProjectsStarredPage = ({ user, ssrTime }: ExternalPageProps)
id={p.id}
stargizers={p._count.stargizers}
owner={p.activity}
starred={p._isStarred}
watching={p._isWatching}
participants={p.participants}
starred={!!p._isStarred}
watching={!!p._isWatching}
participants={p.participants as ActivityByIdReturnType[]}
averageScore={p.averageScore}
/>
</TableRowItem>
Expand Down
2 changes: 1 addition & 1 deletion src/pages/explore/projects/starred.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { declareSsrProps } from '../../../utils/declareSsrProps';

export const getServerSideProps = declareSsrProps(
async ({ ssrHelpers }) => {
await ssrHelpers.project.getStarred.fetch();
await ssrHelpers.v2.project.starred.fetch();
},
{
private: true,
Expand Down
10 changes: 10 additions & 0 deletions trpc/queries/projectV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,16 @@ interface GetUserProjectsQueryParams {
includeSubsGoals?: boolean;
}

export const getStarredProjectsIds = (activityId: string) => {
return db
.selectFrom('Project')
.select(['Project.id'])
.where('Project.id', 'in', ({ selectFrom }) =>
selectFrom('_projectStargizers').select('B').where('A', '=', activityId),
)
.where('Project.archived', 'is not', true);
};

export const getUserProjectsQuery = ({
activityId,
role,
Expand Down
23 changes: 0 additions & 23 deletions trpc/router/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -422,29 +422,6 @@ export const project = router({
})
.then((res) => res.map((project) => addCalculatedProjectFields(project, activityId, role)));
}),
getStarred: protectedProcedure.query(async ({ ctx }) => {
const { activityId, role } = ctx.session.user;

const whereQuery = {
stargizers: {
some: {
id: activityId,
},
},
};
return prisma.project
.findMany({
orderBy: {
createdAt: 'asc',
},
...getProjectSchema({
role,
activityId,
whereQuery,
}),
})
.then((res) => res.map((project) => addCalculatedProjectFields(project, activityId, role)));
}),
getById: protectedProcedure
.input(
z.object({
Expand Down
24 changes: 24 additions & 0 deletions trpc/router/projectV2.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { z } from 'zod';
import { sql } from 'kysely';
import { jsonBuildObject } from 'kysely/helpers/postgres';

import { router, protectedProcedure } from '../trpcBackend';
import { userProjectsSchema } from '../../src/schema/project';
import {
getProjectsByIds,
getStarredProjectsIds,
getUserProjectsQuery,
getUserProjectsWithGoals,
getWholeGoalCountByProjectIds,
Expand Down Expand Up @@ -74,6 +77,27 @@ export const project = router({
}
}),

starred: protectedProcedure.query(async ({ ctx }) => {
const { activityId, role } = ctx.session.user;
try {
const projectIds = await getStarredProjectsIds(activityId).execute();

return getProjectsByIds({ activityId, in: projectIds, role })
.select([
jsonBuildObject({
stargizers: sql<number>`(select count("A") from "_projectStargizers" where "B" = "Project".id)`,
watchers: sql<number>`(select count("A") from "_projectWatchers" where "B" = "Project".id)`,
children: sql<number>`(select count("B") from "_parentChildren" where "A" = "Project".id)`,
participants: sql<number>`(select count("A") from "_projectParticipants" where "B" = "Project".id)`,
}).as('_count'),
])
.$castTo<ProjectResponse & Pick<ProjectsWithGoals, '_count'>>()
.execute();
} catch (e) {
console.log(e);
}
}),

userProjectsWithGoals: protectedProcedure
.input(
z.object({
Expand Down

0 comments on commit 9d66ea8

Please sign in to comment.