mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-30 13:43:59 +08:00
[resumes][feat] Fetch resumes for browse tabs (#326)
* [resumes][fix] Change browse list item styling * [resumes][feat] Add protected tabs router for browse page * [resumes][feat] Fetch all, starred and my resumes in browse page * [resumes][fix] Fix overflow y scrolling * [resumes][fix] Use date-fns to format upload time text
This commit is contained in:
@ -4,6 +4,7 @@ import { createRouter } from './context';
|
||||
import { protectedExampleRouter } from './protected-example-router';
|
||||
import { resumesRouter } from './resumes';
|
||||
import { resumesDetailsRouter } from './resumes-details-router';
|
||||
import { resumesResumeProtectedTabsRouter } from './resumes-resume-protected-tabs-router';
|
||||
import { resumesResumeUserRouter } from './resumes-resume-user-router';
|
||||
import { resumeReviewsRouter } from './resumes-reviews-router';
|
||||
import { resumesReviewsUserRouter } from './resumes-reviews-user-router';
|
||||
@ -21,6 +22,7 @@ export const appRouter = createRouter()
|
||||
.merge('resumes.resume.', resumesRouter)
|
||||
.merge('resumes.details.', resumesDetailsRouter)
|
||||
.merge('resumes.resume.user.', resumesResumeUserRouter)
|
||||
.merge('resumes.resume.browse.', resumesResumeProtectedTabsRouter)
|
||||
.merge('resumes.reviews.', resumeReviewsRouter)
|
||||
.merge('resumes.reviews.user.', resumesReviewsUserRouter);
|
||||
|
||||
|
@ -0,0 +1,93 @@
|
||||
import { createProtectedRouter } from './context';
|
||||
|
||||
import type { Resume } from '~/types/resume';
|
||||
|
||||
export const resumesResumeProtectedTabsRouter = createProtectedRouter()
|
||||
.query('stars', {
|
||||
async resolve({ ctx }) {
|
||||
const userId = ctx.session?.user?.id;
|
||||
const resumeStarsData = await ctx.prisma.resumesStar.findMany({
|
||||
include: {
|
||||
resume: {
|
||||
include: {
|
||||
_count: {
|
||||
select: {
|
||||
comments: true,
|
||||
stars: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
user: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc',
|
||||
},
|
||||
where: {
|
||||
userId,
|
||||
},
|
||||
});
|
||||
return resumeStarsData.map((rs) => {
|
||||
const resume: Resume = {
|
||||
additionalInfo: rs.resume.additionalInfo,
|
||||
createdAt: rs.resume.createdAt,
|
||||
experience: rs.resume.experience,
|
||||
id: rs.id,
|
||||
location: rs.resume.location,
|
||||
numComments: rs.resume._count.comments,
|
||||
numStars: rs.resume._count.stars,
|
||||
role: rs.resume.role,
|
||||
title: rs.resume.title,
|
||||
url: rs.resume.url,
|
||||
user: rs.user.name!,
|
||||
};
|
||||
return resume;
|
||||
});
|
||||
},
|
||||
})
|
||||
.query('my', {
|
||||
async resolve({ ctx }) {
|
||||
const userId = ctx.session?.user?.id;
|
||||
const resumesData = await ctx.prisma.resumesResume.findMany({
|
||||
include: {
|
||||
_count: {
|
||||
select: {
|
||||
comments: true,
|
||||
stars: true,
|
||||
},
|
||||
},
|
||||
user: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc',
|
||||
},
|
||||
where: {
|
||||
userId,
|
||||
},
|
||||
});
|
||||
return resumesData.map((r) => {
|
||||
const resume: Resume = {
|
||||
additionalInfo: r.additionalInfo,
|
||||
createdAt: r.createdAt,
|
||||
experience: r.experience,
|
||||
id: r.id,
|
||||
location: r.location,
|
||||
numComments: r._count.comments,
|
||||
numStars: r._count.stars,
|
||||
role: r.role,
|
||||
title: r.title,
|
||||
url: r.url,
|
||||
user: r.user.name!,
|
||||
};
|
||||
return resume;
|
||||
});
|
||||
},
|
||||
});
|
@ -2,7 +2,7 @@ import { createRouter } from './context';
|
||||
|
||||
import type { Resume } from '~/types/resume';
|
||||
|
||||
export const resumesRouter = createRouter().query('list', {
|
||||
export const resumesRouter = createRouter().query('all', {
|
||||
async resolve({ ctx }) {
|
||||
const resumesData = await ctx.prisma.resumesResume.findMany({
|
||||
include: {
|
||||
|
Reference in New Issue
Block a user