send sign request, sign status

This commit is contained in:
Timur Ercan
2023-01-27 18:15:41 +01:00
parent 2ebb68ca7a
commit 59f5297dd7
7 changed files with 68 additions and 24 deletions

View File

@ -19,10 +19,18 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
return;
}
let document = await prisma.document.findFirst({
const document = await prisma.document.findFirstOrThrow({
where: {
id: +documentId,
},
include: {
User: {
select: {
name: true,
},
},
Recipient: true,
},
});
if (!document)
@ -35,14 +43,17 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
});
(await recipients).forEach(async (recipient) => {
sendSigningRequestMail(recipient, document);
await prisma.recipient.update({
where: { id: recipient.id },
await sendSigningRequestMail(recipient, document);
await prisma.recipient.updateMany({
where: {
id: recipient.id,
sendStatus: SendStatus.NOT_SENT,
},
data: { sendStatus: SendStatus.SENT },
});
});
res.status(200);
return res.status(200).end();
}
export default defaultHandler({

View File

@ -5,32 +5,45 @@ import {
} from "@documenso/lib/server";
import prisma from "@documenso/prisma";
import { NextApiRequest, NextApiResponse } from "next";
import { SigningStatus } from "@prisma/client";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const existingUser = await getUserFromToken(req, res);
const { id: documentId } = req.query;
const { token: recipientToken } = req.query;
if (!documentId) {
res.status(400).send("Missing parameter documentId.");
if (!recipientToken) {
res.status(401).send("Missing recipient token.");
return;
}
const recipient = await prisma.recipient.findFirstOrThrow({
where: { token: recipientToken?.toString() },
});
if (!recipient) {
res.status(401).send("Recipient not found.");
return;
}
let document = await prisma.document.findFirst({
where: {
id: +documentId,
id: recipient.documentId,
},
});
if (!document)
res.status(404).end(`No document with id ${documentId} found.`);
if (!document) res.status(404).end(`No document found.`);
const recipients = prisma.recipient.findMany({
where: { documentId: +documentId },
// todo sign ui
await prisma.recipient.update({
where: {
id: recipient.id,
},
data: {
signingStatus: SigningStatus.SIGNED,
},
});
// todo sign stuff
return res.status(200).end();
}

View File

@ -1,12 +1,12 @@
import { ReactElement, useEffect } from "react";
import Layout from "../../components/layout";
import { NextPageWithLayout } from "../_app";
import Layout from "../../../components/layout";
import { NextPageWithLayout } from "../../_app";
import { Document, Page, pdfjs } from "react-pdf";
import dynamic from "next/dynamic";
import { useRouter } from "next/router";
import { NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib";
const PDFViewer = dynamic(() => import("../../components/pdf-viewer"), {
const PDFViewer = dynamic(() => import("../../../components/pdf-viewer"), {
ssr: false,
});

View File

@ -0,0 +1,22 @@
import Head from "next/head";
import { ReactElement } from "react";
import Layout from "../../../components/layout";
import Logo from "../../../components/logo";
import { NextPageWithLayout } from "../../_app";
const SignPage: NextPageWithLayout = () => {
return (
<>
<Head>
<title>Sign | Documenso</title>
</Head>
Hello, please sign at the dotted line.
</>
);
};
SignPage.getLayout = function getLayout(page: ReactElement) {
return <Layout>{page}</Layout>;
};
export default SignPage;