index.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import {
  2. User
  3. } from "../../../models/User";
  4. import redis from "../../../config/redis";
  5. import {
  6. StartMailVerifyResult,
  7. StartMailVerifyInput
  8. } from "./types";
  9. import {
  10. verificationCode,
  11. TTL_SECONDS
  12. } from "../../../utils";
  13. // import { sendMail } from "../../../utils/mailer"; // mail gönderme fonskiyonu bu şekilde ilerde import edilecek.
  14. const startMailVerify = async (input: StartMailVerifyInput): Promise<StartMailVerifyResult> => {
  15. try {
  16. const {
  17. userID
  18. } = input;
  19. const user = await User.findById(userID);
  20. if (!user) {
  21. return {
  22. message: "user-not-found",
  23. code: 404
  24. };
  25. }
  26. if (user.isMailVerified) {
  27. return {
  28. message: "mail-already-verified",
  29. code: 400
  30. };
  31. }
  32. const existingTTL = await redis.ttl(`mail-verify-${userID}`);
  33. if (existingTTL > 0) {
  34. return {
  35. message: "please-wait-before-requesting-again",
  36. code: 429,
  37. payload: {
  38. remainingTime: existingTTL
  39. }
  40. };
  41. }
  42. await redis.setex(`mail-verify-${userID}`, TTL_SECONDS, verificationCode);
  43. // MAİL GÖNDERME İŞLEMİ (mail servisini bağla) bu kısımda olacak şimdilik elle müdahale ediliyor.
  44. // await sendMail(user.mail, "Doğrulama Kodunuz", `Kodunuz: ${verificationCode}`); şeklinde olacak.
  45. return {
  46. message: "verification-code-sent",
  47. code: 200,
  48. payload: {
  49. remainingTime: TTL_SECONDS
  50. }
  51. };
  52. } catch (error) {
  53. console.error("StartMailVerify error:", error);
  54. return {
  55. message: "internal-server-error",
  56. code: 500
  57. };
  58. }
  59. };
  60. export default startMailVerify;