feat: add api
This commit is contained in:
21
package-lock.json
generated
21
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
9
src/app/api/heartbeat/route.ts
Normal file
9
src/app/api/heartbeat/route.ts
Normal 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',
|
||||
},
|
||||
});
|
||||
}
|
||||
55
src/app/api/sendform/route.ts
Normal file
55
src/app/api/sendform/route.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user