|
|
@@ -0,0 +1,72 @@
|
|
|
+import {
|
|
|
+ User
|
|
|
+} from "../../../models/User";
|
|
|
+import redis from "../../../config/redis";
|
|
|
+
|
|
|
+interface FinishMailVerifyInput {
|
|
|
+ userID: string;
|
|
|
+ code: string;
|
|
|
+}
|
|
|
+
|
|
|
+interface FinishMailVerifyResult {
|
|
|
+ message: string;
|
|
|
+ code: number;
|
|
|
+}
|
|
|
+
|
|
|
+const finishMailVerify = async (input: FinishMailVerifyInput): Promise<FinishMailVerifyResult> => {
|
|
|
+ try {
|
|
|
+ const {
|
|
|
+ userID,
|
|
|
+ code
|
|
|
+ } = input;
|
|
|
+
|
|
|
+ if (!userID || !code) {
|
|
|
+ return {
|
|
|
+ message: "userID-and-code-required",
|
|
|
+ code: 400,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ const user = await User.findById(userID);
|
|
|
+ if (!user) {
|
|
|
+ return {
|
|
|
+ message: "user-not-found",
|
|
|
+ code: 404
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ const cachedCode = await redis.get(`mail-verify-${userID}`);
|
|
|
+ if (!cachedCode) {
|
|
|
+ return {
|
|
|
+ message: "exceeded-time-limit-for-request",
|
|
|
+ code: 400
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cachedCode !== code) {
|
|
|
+ return {
|
|
|
+ message: "invalid-code",
|
|
|
+ code: 400
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ await User.findByIdAndUpdate(userID, {
|
|
|
+ isMailVerified: true
|
|
|
+ });
|
|
|
+ await redis.del(`mail-verify-${userID}`);
|
|
|
+
|
|
|
+ return {
|
|
|
+ message: "mail-verified",
|
|
|
+ code: 200
|
|
|
+ };
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.error("FinishMailVerify error:", error);
|
|
|
+ return {
|
|
|
+ message: "internal-server-error",
|
|
|
+ code: 500
|
|
|
+ };
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+export default finishMailVerify;
|