Skip to content

Commit

Permalink
refactor(redis): Change Redis Implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
xyzuan committed Dec 5, 2024
1 parent a54340a commit 593ab12
Show file tree
Hide file tree
Showing 12 changed files with 236 additions and 230 deletions.
Binary file modified bun.lockb
Binary file not shown.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
"start": "bun install && bunx prisma generate && bunx prisma db push && bun run --watch src/index.ts"
},
"dependencies": {
"@atakan75/elysia-redis": "^0.1.8",
"@elysiajs/cors": "^1.1.1",
"@elysiajs/eden": "^1.1.3",
"@elysiajs/opentelemetry": "^1.1.7",
Expand Down
80 changes: 39 additions & 41 deletions src/api/controller/blog/getBlog.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,44 @@
import { createElysia } from "@libs/elysia";
import { prismaClient } from "@libs/prismaDatabase";
import redis from "@libs/redis";
import { redis } from "@libs/redisClient";

export default createElysia()
.use(redis)
.get(
"/",
async ({ redis }) => {
let blogData;
const redisBlogData = await redis.get("blog.all");
if (!redisBlogData) {
const getAllBlog = await prismaClient.blog
.findMany({
include: {
comments: true,
reactions: true,
},
orderBy: {
createdAt: "desc",
},
})
.then((data) =>
data.map((blog) => ({
...blog,
commentsCount: blog.comments.length,
reactionsCount: blog.reactions.length,
}))
);
blogData = getAllBlog;
await redis.set("blog.all", JSON.stringify(getAllBlog), 1440);
} else {
blogData = JSON.parse(redisBlogData);
}
export default createElysia().get(
"/",
async () => {
let blogData;
const redisBlogData = await redis.get("blog.all");
if (!redisBlogData) {
const getAllBlog = await prismaClient.blog
.findMany({
include: {
comments: true,
reactions: true,
},
orderBy: {
createdAt: "desc",
},
})
.then((data) =>
data.map((blog) => ({
...blog,
commentsCount: blog.comments.length,
reactionsCount: blog.reactions.length,
}))
);
blogData = getAllBlog;
await redis.set("blog.all", JSON.stringify(getAllBlog));
} else {
blogData = JSON.parse(redisBlogData);
}

return {
status: 200,
data: blogData,
};
return {
status: 200,
data: blogData,
};
},
{
detail: {
tags: ["Blog"],
},
{
detail: {
tags: ["Blog"],
},
}
);
}
);
118 changes: 58 additions & 60 deletions src/api/controller/blog/getBlogBySlug.ts
Original file line number Diff line number Diff line change
@@ -1,74 +1,72 @@
import { createElysia } from "@libs/elysia";
import { prismaClient } from "@libs/prismaDatabase";
import redis from "@libs/redis";
import { redis } from "@libs/redisClient";

export default createElysia()
.use(redis)
.get(
"/:slug",
async ({ params: { slug }, redis }) => {
let blogData;
const redisBlogData = await redis.get(`blog.${slug}`);
if (!redisBlogData) {
const blog = await prismaClient.blog.findUnique({
where: {
slug: slug,
},
include: {
reactions: {
include: {
user: {
select: {
id: true,
name: true,
iconUrl: true,
},
export default createElysia().get(
"/:slug",
async ({ params: { slug } }) => {
let blogData;
const redisBlogData = await redis.get(`blog.${slug}`);
if (!redisBlogData) {
const blog = await prismaClient.blog.findUnique({
where: {
slug: slug,
},
include: {
reactions: {
include: {
user: {
select: {
id: true,
name: true,
iconUrl: true,
},
},
},
comments: {
include: {
user: {
select: {
id: true,
name: true,
email: true,
iconUrl: true,
bannerUrl: true,
location: true,
headline: true,
isAdmin: true,
},
},
comments: {
include: {
user: {
select: {
id: true,
name: true,
email: true,
iconUrl: true,
bannerUrl: true,
location: true,
headline: true,
isAdmin: true,
},
},
},
},
});
blogData = blog;
await redis.set(`blog.${slug}`, JSON.stringify(blog), 1440);
} else {
blogData = JSON.parse(redisBlogData);
}

if (!blogData) {
return {
status: 404,
message: "Blog not found.",
};
}
},
});
blogData = blog;
await redis.set(`blog.${slug}`, JSON.stringify(blog));
} else {
blogData = JSON.parse(redisBlogData);
}

if (!blogData) {
return {
status: 200,
data: {
...blogData,
commentsCount: blogData.comments.length,
reactionsCount: blogData.reactions.length,
},
status: 404,
message: "Blog not found.",
};
},
{
detail: {
tags: ["Blog"],
},
}
);

return {
status: 200,
data: {
...blogData,
commentsCount: blogData.comments.length,
reactionsCount: blogData.reactions.length,
},
};
},
{
detail: {
tags: ["Blog"],
},
}
);
64 changes: 31 additions & 33 deletions src/api/controller/portfolio/getAllPortfolio.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,36 @@
import { createElysia } from "@libs/elysia";
import { prismaClient } from "@libs/prismaDatabase";
import redis from "@libs/redis";
import { redis } from "@libs/redisClient";

export default createElysia()
.use(redis)
.get(
"/",
async ({ redis }) => {
let portfolioData;
const redisPortfolioData = await redis.get(`portfolio.all`);
if (!redisPortfolioData) {
const portfolio = await prismaClient.portfolio.findMany({
include: {
stacks: true,
export default createElysia().get(
"/",
async () => {
let portfolioData;
const redisPortfolioData = await redis.get(`portfolio.all`);
if (!redisPortfolioData) {
const portfolio = await prismaClient.portfolio.findMany({
include: {
stacks: true,
},
orderBy: [
{
isFeatured: "desc",
},
orderBy: [
{
isFeatured: "desc",
},
],
});
portfolioData = portfolio;
await redis.set("portfolio.all", JSON.stringify(portfolio), 1440);
} else {
portfolioData = JSON.parse(redisPortfolioData);
}
return {
status: 200,
data: portfolioData,
};
},
{
detail: {
tags: ["Portfolios"],
},
],
});
portfolioData = portfolio;
await redis.set("portfolio.all", JSON.stringify(portfolio));
} else {
portfolioData = JSON.parse(redisPortfolioData);
}
);
return {
status: 200,
data: portfolioData,
};
},
{
detail: {
tags: ["Portfolios"],
},
}
);
58 changes: 28 additions & 30 deletions src/api/controller/portfolio/getPortfolioById.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,33 @@
import { createElysia } from "@libs/elysia";
import { prismaClient } from "@libs/prismaDatabase";
import redis from "@libs/redis";
import { redis } from "@libs/redisClient";

export default createElysia()
.use(redis)
.get(
"/:id",
async ({ params: { id }, redis }) => {
let portfolioData;
const redisPortfolioData = await redis.get(`portfolio.${id}`);
if (!redisPortfolioData) {
const portfolio = await prismaClient.portfolio.findUnique({
where: { id: parseInt(id) },
include: {
stacks: true,
},
});
portfolioData = portfolio;
await redis.set(`portfolio.${id}`, JSON.stringify(portfolio), 1440);
} else {
portfolioData = JSON.parse(redisPortfolioData);
}
export default createElysia().get(
"/:id",
async ({ params: { id } }) => {
let portfolioData;
const redisPortfolioData = await redis.get(`portfolio.${id}`);
if (!redisPortfolioData) {
const portfolio = await prismaClient.portfolio.findUnique({
where: { id: parseInt(id) },
include: {
stacks: true,
},
});
portfolioData = portfolio;
await redis.set(`portfolio.${id}`, JSON.stringify(portfolio));
} else {
portfolioData = JSON.parse(redisPortfolioData);
}

return {
status: 200,
data: portfolioData,
};
return {
status: 200,
data: portfolioData,
};
},
{
detail: {
tags: ["Portfolios"],
},
{
detail: {
tags: ["Portfolios"],
},
}
);
}
);
5 changes: 2 additions & 3 deletions src/api/controller/portfolio/updatePortfolio.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@ import { ForbiddenException } from "@constants/exceptions";
import { authGuard } from "@libs/authGuard";
import { createElysia } from "@libs/elysia";
import { prismaClient } from "@libs/prismaDatabase";
import redis from "@libs/redis";
import { redis } from "@libs/redisClient";
import portfolioModel from "@models/portfolio.model";

export default createElysia()
.use(portfolioModel)
.use(authGuard)
.use(redis)
.patch(
"/:id",
async ({ body, user, params: { id }, redis }) => {
async ({ body, user, params: { id } }) => {
if (!user.isAdmin) throw new ForbiddenException();

let updatedData: any = body;
Expand Down
Loading

0 comments on commit 593ab12

Please sign in to comment.