get documents for user query refactor

This commit is contained in:
Timur Ercan
2023-02-01 18:17:14 +01:00
parent f70108c36a
commit 99fffd1614
5 changed files with 43 additions and 35 deletions

View File

@ -2,8 +2,8 @@ import { defaultHandler, defaultResponder } from "@documenso/lib/server";
import prisma from "@documenso/prisma"; import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next"; import { NextApiRequest, NextApiResponse } from "next";
import { getUserFromToken } from "@documenso/lib/server"; import { getUserFromToken } from "@documenso/lib/server";
import formidable, { Files } from "formidable"; import formidable from "formidable";
import { getToken } from "next-auth/jwt"; import { getDocumentsForUserFromToken } from "@documenso/lib/query";
export const config = { export const config = {
api: { api: {
@ -49,17 +49,7 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) {
let user = await getUserFromToken(req, res); let user = await getUserFromToken(req, res);
if (!user) return; if (!user) return;
const documents = await prisma.document.findMany({ const documents = await getDocumentsForUserFromToken({ req: req, res: res });
where: {
userId: user?.id,
},
select: {
id: true,
title: true,
status: true,
Recipient: true,
},
});
return res.status(200).json(documents); return res.status(200).json(documents);
} }

View File

@ -1,8 +1,6 @@
import { useSession } from "next-auth/react";
import Head from "next/head"; import Head from "next/head";
import { ReactElement, useEffect, useState } from "react"; import { ReactElement } from "react";
import Layout from "../components/layout"; import Layout from "../components/layout";
import Settings from "../components/settings";
import Link from "next/link"; import Link from "next/link";
import type { NextPageWithLayout } from "./_app"; import type { NextPageWithLayout } from "./_app";
import { import {
@ -13,20 +11,16 @@ import {
SunIcon, SunIcon,
XCircleIcon, XCircleIcon,
} from "@heroicons/react/24/outline"; } from "@heroicons/react/24/outline";
import { FormProvider, useForm } from "react-hook-form";
import Router from "next/router";
import { NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib";
import toast from "react-hot-toast";
import { uploadDocument } from "@documenso/features"; import { uploadDocument } from "@documenso/features";
import prisma from "@documenso/prisma"; import prisma from "@documenso/prisma";
import { import {
ReadStatus, ReadStatus,
SendStatus, SendStatus,
SigningStatus,
DocumentStatus, DocumentStatus,
Document as PrismaDocument, Document as PrismaDocument,
} from "@prisma/client"; } from "@prisma/client";
import { getUserFromToken } from "@documenso/lib/server"; import { getUserFromToken } from "@documenso/lib/server";
import { getDocumentsForUserFromToken } from "@documenso/lib/query";
type FormValues = { type FormValues = {
document: File; document: File;
@ -160,11 +154,9 @@ export async function getServerSideProps(context: any) {
// todo optimize querys // todo optimize querys
// todo no intersection groups // todo no intersection groups
const documents: PrismaDocument[] = await prisma.document.findMany({ const documents: PrismaDocument[] = await getDocumentsForUserFromToken(
where: { context
userId: user.id, );
},
});
const drafts: PrismaDocument[] = documents.filter( const drafts: PrismaDocument[] = documents.filter(
(d) => d.status === DocumentStatus.DRAFT (d) => d.status === DocumentStatus.DRAFT

View File

@ -1,5 +1,4 @@
import { useSession } from "next-auth/react"; import { ReactElement, useState } from "react";
import { ReactElement, useEffect, useState } from "react";
import Layout from "../components/layout"; import Layout from "../components/layout";
import type { NextPageWithLayout } from "./_app"; import type { NextPageWithLayout } from "./_app";
import Head from "next/head"; import Head from "next/head";
@ -15,15 +14,12 @@ import { useRouter } from "next/router";
import { uploadDocument } from "@documenso/features"; import { uploadDocument } from "@documenso/features";
import { DocumentStatus } from "@prisma/client"; import { DocumentStatus } from "@prisma/client";
import { Tooltip as ReactTooltip } from "react-tooltip"; import { Tooltip as ReactTooltip } from "react-tooltip";
import { getDocumentsForUserFromToken } from "@documenso/lib/query";
const DocumentsPage: NextPageWithLayout = (req, res) => { const DocumentsPage: NextPageWithLayout = (props: any) => {
const router = useRouter(); const router = useRouter();
const [documents = [], setDocuments] = useState([]); const [documents = [], setDocuments] = useState(props.documents);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(false);
useEffect(() => {
getDocuments();
}, []);
const getDocuments = async () => { const getDocuments = async () => {
if (!documents.length) setLoading(true); if (!documents.length) setLoading(true);
@ -279,6 +275,14 @@ const DocumentsPage: NextPageWithLayout = (req, res) => {
); );
}; };
export async function getServerSideProps(context: any) {
return {
props: {
documents: await getDocumentsForUserFromToken(context),
},
};
}
function formatDocumentStatus(status: DocumentStatus) { function formatDocumentStatus(status: DocumentStatus) {
switch (status) { switch (status) {
case DocumentStatus.DRAFT: case DocumentStatus.DRAFT:

View File

@ -0,0 +1,21 @@
import { getUserFromToken } from "@documenso/lib/server";
import prisma from "@documenso/prisma";
import { Document as PrismaDocument } from "@prisma/client";
export const getDocumentsForUserFromToken = async (
ssrContext: any
): Promise<PrismaDocument[]> => {
const user = await getUserFromToken(ssrContext.req, ssrContext.res);
if (!user) return Promise.reject("Invalid user or token.s");
const documents: PrismaDocument[] = await prisma.document.findMany({
where: {
userId: user.id,
},
include: {
Recipient: true,
},
});
return documents;
};

View File

@ -0,0 +1 @@
export { getDocumentsForUserFromToken } from "./getDocumentsForUserFromToken";