Skip to content

Commit

Permalink
Merge pull request #37 from kentibs/feat/newletter
Browse files Browse the repository at this point in the history
feat: add newsletter subscription endpoint
  • Loading branch information
Tibz-Dankan authored Jan 27, 2024
2 parents dfdff51 + b82e6b3 commit 2411f87
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 0 deletions.
18 changes: 18 additions & 0 deletions prisma/migrations/20240127203910_test/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-- CreateTable
CREATE TABLE "_news_letter" (
"newsLetterId" TEXT NOT NULL,
"email" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3),

CONSTRAINT "_news_letter_pkey" PRIMARY KEY ("newsLetterId")
);

-- CreateIndex
CREATE UNIQUE INDEX "_news_letter_email_key" ON "_news_letter"("email");

-- CreateIndex
CREATE INDEX "_news_letter_newsLetterId_idx" ON "_news_letter"("newsLetterId");

-- CreateIndex
CREATE INDEX "_news_letter_email_idx" ON "_news_letter"("email");
11 changes: 11 additions & 0 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,17 @@ model EventImage {
@@map("_event_images")
}

model NewsLetter {
newsLetterId String @id @default(uuid())
email String @unique @db.Text
createdAt DateTime @default(now())
updatedAt DateTime? @updatedAt
@@index([newsLetterId])
@@index([email])
@@map("_news_letter")
}

// PRISMA COMMNANDS

// INITIALIZE PRISMA
Expand Down
2 changes: 2 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { userRoutes } from "./routes/auth/userRoutes";
import { tokenRoutes } from "./routes/token/tokenRoutes";
import { eventRoutes } from "./routes/event/eventRoutes";
import { monitoringRoutes } from "./routes/monitoring/monitoringRoutes";
import { newsLetterRoutes } from "./routes/newsLetter/newsLetterRoutes";
import {
startRequestMonitoringTimer,
endRequestMonitoringTimer,
Expand Down Expand Up @@ -36,6 +37,7 @@ app.use(startRequestMonitoringTimer);
app.use("/api/v1/users", userRoutes);
app.use("/api/v1/tokens", tokenRoutes);
app.use("/api/v1/events", eventRoutes);
app.use("/api/v1/newsletter", newsLetterRoutes);

app.use(monitoringRoutes);
app.use(endRequestMonitoringTimer);
Expand Down
30 changes: 30 additions & 0 deletions src/controllers/newsLetterController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Request, Response, NextFunction } from "express";
import { AppError } from "../utils/error";
import { asyncHandler } from "../utils/asyncHandler";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();
const NewsLetter = prisma.newsLetter;

export const subscribeToNewsLetter = asyncHandler(
async (req: Request, res: Response, next: NextFunction) => {
const email = req.body.email as string;

if (!email) return next(new AppError("Please provide your email", 400));

const savedEmail = await NewsLetter.findFirst({
where: { email: { equals: email } },
});

if (savedEmail) {
return next(new AppError("Provided email is already subscribed", 400));
}

await NewsLetter.create({ data: { email: email } });

res.status(201).json({
status: "success",
message: "Subscribed to SEG-MUK newsletter successfully",
});
}
);
8 changes: 8 additions & 0 deletions src/routes/newsLetter/newsLetterRoutes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import express from "express";
import { subscribeToNewsLetter } from "../../controllers/newsLetterController";

const router = express.Router();

router.post("/subscribe", subscribeToNewsLetter);

export { router as newsLetterRoutes };

0 comments on commit 2411f87

Please sign in to comment.