feat: add api

This commit is contained in:
2025-06-09 16:21:17 +03:00
parent 02415d9231
commit c60a832b8a
4 changed files with 87 additions and 0 deletions

21
package-lock.json generated
View File

@@ -10,6 +10,7 @@
"dependencies": {
"@hookform/resolvers": "^5.1.1",
"next": "15.3.2",
"nodemailer": "^7.0.3",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-hook-form": "^7.57.0",
@@ -20,6 +21,7 @@
"devDependencies": {
"@eslint/eslintrc": "^3",
"@types/node": "^20",
"@types/nodemailer": "^6.4.17",
"@types/react": "^19",
"@types/react-dom": "^19",
"clsx": "^2.1.1",
@@ -962,6 +964,16 @@
"undici-types": "~6.19.2"
}
},
"node_modules/@types/nodemailer": {
"version": "6.4.17",
"resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz",
"integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/react": {
"version": "19.1.6",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz",
@@ -4372,6 +4384,15 @@
}
}
},
"node_modules/nodemailer": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.3.tgz",
"integrity": "sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",

View File

@@ -13,6 +13,7 @@
"dependencies": {
"@hookform/resolvers": "^5.1.1",
"next": "15.3.2",
"nodemailer": "^7.0.3",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-hook-form": "^7.57.0",
@@ -23,6 +24,7 @@
"devDependencies": {
"@eslint/eslintrc": "^3",
"@types/node": "^20",
"@types/nodemailer": "^6.4.17",
"@types/react": "^19",
"@types/react-dom": "^19",
"clsx": "^2.1.1",

View File

@@ -0,0 +1,9 @@
export async function GET(request: Request) {
return new Response('Heartbeat!', {
status: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
},
});
}

View File

@@ -0,0 +1,55 @@
import nodemailer from 'nodemailer';
type TFormData = {
name: string;
phone: string;
message: string;
form: string;
};
async function sendMail(data: TFormData) {
const { name, phone, message, form } = data;
const formattedBody = `
<html>
<body>
<p>${message}</p>
<p>---</p>
<p>${name}</p>
<p>${phone}</p>
<p>---</p>
<p>${form}</p>
</body>
</html>
`;
const transporter = nodemailer.createTransport({
service: 'gmail', // С помощью этой настройки можно менять тип почты, например gmail
auth: {
user: process.env.MAIL_USER,
pass: process.env.MAIL_PASS,
},
});
return await transporter.sendMail({
from: process.env.MAIL_FROM,
to: process.env.MAIL_TO,
subject: 'Заявка с сайта',
html: formattedBody,
});
}
export async function POST(request: Request) {
try {
const payload = await request.json();
console.log(payload);
} catch (error) {
return new Response(`Api error: ${error}`, {
status: 400,
});
}
return new Response('Success!', {
status: 200,
});
}