mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-27 20:22:33 +08:00
[offers][feat] create protected router to store user profile endpoints
This commit is contained in:
@ -16,7 +16,7 @@ function Test() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const addToUserProfileMutation = trpc.useMutation(
|
const addToUserProfileMutation = trpc.useMutation(
|
||||||
['offers.profile.addToUserProfile'],
|
['offers.user.profile.addToUserProfile'],
|
||||||
{
|
{
|
||||||
onError(err) {
|
onError(err) {
|
||||||
alert(err);
|
alert(err);
|
||||||
@ -85,7 +85,7 @@ function Test() {
|
|||||||
addToUserProfileMutation.mutate({
|
addToUserProfileMutation.mutate({
|
||||||
profileId: 'cl9efyn9p004ww3u42mjgl1vn',
|
profileId: 'cl9efyn9p004ww3u42mjgl1vn',
|
||||||
token: '24bafa6fef803f447d7f2e229b14cb8ee43f0c22dffbe41ee1c1e5e6e870f117',
|
token: '24bafa6fef803f447d7f2e229b14cb8ee43f0c22dffbe41ee1c1e5e6e870f117',
|
||||||
userId: 'cl9ehvpng0000w3ec2mpx0bdd',
|
// UserId: 'cl9ehvpng0000w3ec2mpx0bdd',
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import { offersRouter } from './offers/offers';
|
|||||||
import { offersAnalysisRouter } from './offers/offers-analysis-router';
|
import { offersAnalysisRouter } from './offers/offers-analysis-router';
|
||||||
import { offersCommentsRouter } from './offers/offers-comments-router';
|
import { offersCommentsRouter } from './offers/offers-comments-router';
|
||||||
import { offersProfileRouter } from './offers/offers-profile-router';
|
import { offersProfileRouter } from './offers/offers-profile-router';
|
||||||
|
import { offersUserProfileRouter } from './offers/offers-user-profile-router';
|
||||||
import { protectedExampleRouter } from './protected-example-router';
|
import { protectedExampleRouter } from './protected-example-router';
|
||||||
import { questionsAnswerCommentRouter } from './questions/questions-answer-comment-router';
|
import { questionsAnswerCommentRouter } from './questions/questions-answer-comment-router';
|
||||||
import { questionsAnswerCommentUserRouter } from './questions/questions-answer-comment-user-router';
|
import { questionsAnswerCommentUserRouter } from './questions/questions-answer-comment-user-router';
|
||||||
@ -64,7 +65,8 @@ export const appRouter = createRouter()
|
|||||||
.merge('offers.', offersRouter)
|
.merge('offers.', offersRouter)
|
||||||
.merge('offers.profile.', offersProfileRouter)
|
.merge('offers.profile.', offersProfileRouter)
|
||||||
.merge('offers.analysis.', offersAnalysisRouter)
|
.merge('offers.analysis.', offersAnalysisRouter)
|
||||||
.merge('offers.comments.', offersCommentsRouter);
|
.merge('offers.comments.', offersCommentsRouter)
|
||||||
|
.merge('offers.user.profile.', offersUserProfileRouter);
|
||||||
|
|
||||||
// Export type definition of API
|
// Export type definition of API
|
||||||
export type AppRouter = typeof appRouter;
|
export type AppRouter = typeof appRouter;
|
||||||
|
@ -4,7 +4,6 @@ import { JobType } from '@prisma/client';
|
|||||||
import * as trpc from '@trpc/server';
|
import * as trpc from '@trpc/server';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
addToProfileResponseMapper,
|
|
||||||
createOfferProfileResponseMapper,
|
createOfferProfileResponseMapper,
|
||||||
profileDtoMapper,
|
profileDtoMapper,
|
||||||
} from '~/mappers/offers-mappers';
|
} from '~/mappers/offers-mappers';
|
||||||
@ -1407,44 +1406,6 @@ export const offersProfileRouter = createRouter()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new trpc.TRPCError({
|
|
||||||
code: 'UNAUTHORIZED',
|
|
||||||
message: 'Invalid token.',
|
|
||||||
});
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.mutation('addToUserProfile', {
|
|
||||||
input: z.object({
|
|
||||||
profileId: z.string(),
|
|
||||||
token: z.string(),
|
|
||||||
userId: z.string(),
|
|
||||||
}),
|
|
||||||
async resolve({ ctx, input }) {
|
|
||||||
const profile = await ctx.prisma.offersProfile.findFirst({
|
|
||||||
where: {
|
|
||||||
id: input.profileId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const profileEditToken = profile?.editToken;
|
|
||||||
|
|
||||||
if (profileEditToken === input.token) {
|
|
||||||
const updated = await ctx.prisma.offersProfile.update({
|
|
||||||
data: {
|
|
||||||
user: {
|
|
||||||
connect: {
|
|
||||||
id: input.userId,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
where: {
|
|
||||||
id: input.profileId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return addToProfileResponseMapper(updated);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new trpc.TRPCError({
|
throw new trpc.TRPCError({
|
||||||
code: 'UNAUTHORIZED',
|
code: 'UNAUTHORIZED',
|
||||||
message: 'Invalid token.',
|
message: 'Invalid token.',
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
import { z } from 'zod';
|
||||||
|
import * as trpc from '@trpc/server';
|
||||||
|
|
||||||
|
import {
|
||||||
|
addToProfileResponseMapper,
|
||||||
|
} from '~/mappers/offers-mappers';
|
||||||
|
|
||||||
|
import { createProtectedRouter } from '../context';
|
||||||
|
export const offersUserProfileRouter = createProtectedRouter()
|
||||||
|
.mutation('addToUserProfile', {
|
||||||
|
input: z.object({
|
||||||
|
profileId: z.string(),
|
||||||
|
token: z.string(),
|
||||||
|
}),
|
||||||
|
async resolve({ ctx, input }) {
|
||||||
|
const profile = await ctx.prisma.offersProfile.findFirst({
|
||||||
|
where: {
|
||||||
|
id: input.profileId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const profileEditToken = profile?.editToken;
|
||||||
|
if (profileEditToken === input.token) {
|
||||||
|
|
||||||
|
const userId = ctx.session.user.id
|
||||||
|
const updated = await ctx.prisma.offersProfile.update({
|
||||||
|
data: {
|
||||||
|
user: {
|
||||||
|
connect: {
|
||||||
|
id: userId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
where: {
|
||||||
|
id: input.profileId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return addToProfileResponseMapper(updated);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new trpc.TRPCError({
|
||||||
|
code: 'UNAUTHORIZED',
|
||||||
|
message: 'Invalid token.',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
Reference in New Issue
Block a user