mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 15:53:02 +10:00
get documents for user query refactor
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
21
packages/lib/query/getDocumentsForUserFromToken.ts
Normal file
21
packages/lib/query/getDocumentsForUserFromToken.ts
Normal 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;
|
||||||
|
};
|
||||||
1
packages/lib/query/index.ts
Normal file
1
packages/lib/query/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { getDocumentsForUserFromToken } from "./getDocumentsForUserFromToken";
|
||||||
Reference in New Issue
Block a user