|
|
@ -1,7 +1,5 @@
|
|
|
|
import { z } from 'zod';
|
|
|
|
import { z } from 'zod';
|
|
|
|
|
|
|
|
|
|
|
|
import { EXPERIENCES, LOCATIONS, ROLES } from '~/utils/resumes/resumeFilters';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { createProtectedRouter } from '../context';
|
|
|
|
import { createProtectedRouter } from '../context';
|
|
|
|
|
|
|
|
|
|
|
|
import type { Resume } from '~/types/resume';
|
|
|
|
import type { Resume } from '~/types/resume';
|
|
|
@ -165,6 +163,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
isResolved: rs.resume.isResolved,
|
|
|
|
isResolved: rs.resume.isResolved,
|
|
|
|
isStarredByUser: true,
|
|
|
|
isStarredByUser: true,
|
|
|
|
location: rs.resume.location.name,
|
|
|
|
location: rs.resume.location.name,
|
|
|
|
|
|
|
|
locationId: rs.resume.locationId,
|
|
|
|
numComments: rs.resume._count.comments,
|
|
|
|
numComments: rs.resume._count.comments,
|
|
|
|
numStars: rs.resume._count.stars,
|
|
|
|
numStars: rs.resume._count.stars,
|
|
|
|
role: rs.resume.role,
|
|
|
|
role: rs.resume.role,
|
|
|
@ -195,16 +194,6 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedRoleCounts = Object.fromEntries(
|
|
|
|
const mappedRoleCounts = Object.fromEntries(
|
|
|
|
roleCounts.map((rc) => [rc.role, rc._count._all]),
|
|
|
|
roleCounts.map((rc) => [rc.role, rc._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroRoleCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
ROLES.filter((r) => !(r.value in mappedRoleCounts)).map((r) => [
|
|
|
|
|
|
|
|
r.value,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedRoleCounts = {
|
|
|
|
|
|
|
|
...mappedRoleCounts,
|
|
|
|
|
|
|
|
...zeroRoleCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const experienceCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
const experienceCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
_count: {
|
|
|
|
_count: {
|
|
|
@ -226,15 +215,6 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedExperienceCounts = Object.fromEntries(
|
|
|
|
const mappedExperienceCounts = Object.fromEntries(
|
|
|
|
experienceCounts.map((ec) => [ec.experience, ec._count._all]),
|
|
|
|
experienceCounts.map((ec) => [ec.experience, ec._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroExperienceCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
EXPERIENCES.filter((e) => !(e.value in mappedExperienceCounts)).map(
|
|
|
|
|
|
|
|
(e) => [e.value, 0],
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedExperienceCounts = {
|
|
|
|
|
|
|
|
...mappedExperienceCounts,
|
|
|
|
|
|
|
|
...zeroExperienceCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const locationCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
const locationCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
_count: {
|
|
|
|
_count: {
|
|
|
@ -256,21 +236,11 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedLocationCounts = Object.fromEntries(
|
|
|
|
const mappedLocationCounts = Object.fromEntries(
|
|
|
|
locationCounts.map((lc) => [lc.locationId, lc._count._all]),
|
|
|
|
locationCounts.map((lc) => [lc.locationId, lc._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroLocationCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [
|
|
|
|
|
|
|
|
l.value,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedLocationCounts = {
|
|
|
|
|
|
|
|
...mappedLocationCounts,
|
|
|
|
|
|
|
|
...zeroLocationCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const filterCounts = {
|
|
|
|
const filterCounts = {
|
|
|
|
Experience: processedExperienceCounts,
|
|
|
|
experience: mappedExperienceCounts,
|
|
|
|
Location: processedLocationCounts,
|
|
|
|
location: mappedLocationCounts,
|
|
|
|
Role: processedRoleCounts,
|
|
|
|
role: mappedRoleCounts,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
return { filterCounts, mappedResumeData, totalRecords };
|
|
|
|
return { filterCounts, mappedResumeData, totalRecords };
|
|
|
@ -365,6 +335,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
isResolved: r.isResolved,
|
|
|
|
isResolved: r.isResolved,
|
|
|
|
isStarredByUser: r.stars.length > 0,
|
|
|
|
isStarredByUser: r.stars.length > 0,
|
|
|
|
location: r.location.name,
|
|
|
|
location: r.location.name,
|
|
|
|
|
|
|
|
locationId: r.locationId,
|
|
|
|
numComments: r._count.comments,
|
|
|
|
numComments: r._count.comments,
|
|
|
|
numStars: r._count.stars,
|
|
|
|
numStars: r._count.stars,
|
|
|
|
role: r.role,
|
|
|
|
role: r.role,
|
|
|
@ -391,16 +362,6 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedRoleCounts = Object.fromEntries(
|
|
|
|
const mappedRoleCounts = Object.fromEntries(
|
|
|
|
roleCounts.map((rc) => [rc.role, rc._count._all]),
|
|
|
|
roleCounts.map((rc) => [rc.role, rc._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroRoleCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
ROLES.filter((r) => !(r.value in mappedRoleCounts)).map((r) => [
|
|
|
|
|
|
|
|
r.value,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedRoleCounts = {
|
|
|
|
|
|
|
|
...mappedRoleCounts,
|
|
|
|
|
|
|
|
...zeroRoleCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const experienceCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
const experienceCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
_count: {
|
|
|
|
_count: {
|
|
|
@ -418,15 +379,6 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedExperienceCounts = Object.fromEntries(
|
|
|
|
const mappedExperienceCounts = Object.fromEntries(
|
|
|
|
experienceCounts.map((ec) => [ec.experience, ec._count._all]),
|
|
|
|
experienceCounts.map((ec) => [ec.experience, ec._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroExperienceCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
EXPERIENCES.filter((e) => !(e.value in mappedExperienceCounts)).map(
|
|
|
|
|
|
|
|
(e) => [e.value, 0],
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedExperienceCounts = {
|
|
|
|
|
|
|
|
...mappedExperienceCounts,
|
|
|
|
|
|
|
|
...zeroExperienceCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const locationCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
const locationCounts = await ctx.prisma.resumesResume.groupBy({
|
|
|
|
_count: {
|
|
|
|
_count: {
|
|
|
@ -444,21 +396,11 @@ export const resumesResumeUserRouter = createProtectedRouter()
|
|
|
|
const mappedLocationCounts = Object.fromEntries(
|
|
|
|
const mappedLocationCounts = Object.fromEntries(
|
|
|
|
locationCounts.map((lc) => [lc.locationId, lc._count._all]),
|
|
|
|
locationCounts.map((lc) => [lc.locationId, lc._count._all]),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
const zeroLocationCounts = Object.fromEntries(
|
|
|
|
|
|
|
|
LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [
|
|
|
|
|
|
|
|
l.value,
|
|
|
|
|
|
|
|
0,
|
|
|
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
const processedLocationCounts = {
|
|
|
|
|
|
|
|
...mappedLocationCounts,
|
|
|
|
|
|
|
|
...zeroLocationCounts,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const filterCounts = {
|
|
|
|
const filterCounts = {
|
|
|
|
Experience: processedExperienceCounts,
|
|
|
|
experience: mappedExperienceCounts,
|
|
|
|
Location: processedLocationCounts,
|
|
|
|
location: mappedLocationCounts,
|
|
|
|
Role: processedRoleCounts,
|
|
|
|
role: mappedRoleCounts,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
return { filterCounts, mappedResumeData, totalRecords };
|
|
|
|
return { filterCounts, mappedResumeData, totalRecords };
|
|
|
|