diff --git a/api/Dockerfile b/api/Dockerfile new file mode 100644 index 0000000..51811d3 --- /dev/null +++ b/api/Dockerfile @@ -0,0 +1,31 @@ +# Creating multi-stage build for production +FROM node:20-alpine as build +RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev git > /dev/null 2>&1 +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} + +WORKDIR /opt/ +COPY package.json package-lock.json ./ +RUN npm install -g node-gyp +RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install --only=production +ENV PATH=/opt/node_modules/.bin:$PATH +WORKDIR /opt/app +COPY . . +RUN npm run build + + +# Creating final production image +FROM node:20-alpine +RUN apk add --no-cache vips-dev +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} +WORKDIR /opt/ +COPY --from=build /opt/node_modules ./node_modules +WORKDIR /opt/app +COPY --from=build /opt/app ./ +ENV PATH=/opt/node_modules/.bin:$PATH + +RUN chown -R node:node /opt/app +USER node +EXPOSE 1337 +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/api/bun.lockb b/api/bun.lockb new file mode 100755 index 0000000..504d8e5 Binary files /dev/null and b/api/bun.lockb differ diff --git a/api/config/database.ts b/api/config/database.ts index 1853ca4..fa86f15 100644 --- a/api/config/database.ts +++ b/api/config/database.ts @@ -6,7 +6,7 @@ export default ({ env }) => { const connections = { mysql: { connection: { - host: env('DATABASE_HOST', 'localhost'), + host: env('DATABASE_HOST', '192.168.50.107'), port: env.int('DATABASE_PORT', 3306), database: env('DATABASE_NAME', 'strapi'), user: env('DATABASE_USERNAME', 'strapi'), diff --git a/api/data/uploads/a-bug-is-becoming-a-meme-on-the-internet.jpg b/api/data/uploads/a-bug-is-becoming-a-meme-on-the-internet.jpg deleted file mode 100644 index 3f87d36..0000000 Binary files a/api/data/uploads/a-bug-is-becoming-a-meme-on-the-internet.jpg and /dev/null differ diff --git a/api/data/uploads/beautiful-picture.jpg b/api/data/uploads/beautiful-picture.jpg deleted file mode 100644 index ec46439..0000000 Binary files a/api/data/uploads/beautiful-picture.jpg and /dev/null differ diff --git a/api/data/uploads/coffee-art.jpg b/api/data/uploads/coffee-art.jpg deleted file mode 100644 index 15b5e8b..0000000 Binary files a/api/data/uploads/coffee-art.jpg and /dev/null differ diff --git a/api/data/uploads/coffee-beans.jpg b/api/data/uploads/coffee-beans.jpg deleted file mode 100644 index 3719255..0000000 Binary files a/api/data/uploads/coffee-beans.jpg and /dev/null differ diff --git a/api/data/uploads/coffee-shadow.jpg b/api/data/uploads/coffee-shadow.jpg deleted file mode 100644 index 3289d58..0000000 Binary files a/api/data/uploads/coffee-shadow.jpg and /dev/null differ diff --git a/api/data/uploads/daviddoe@strapi.io.jpg b/api/data/uploads/daviddoe@strapi.io.jpg deleted file mode 100644 index ee8adca..0000000 Binary files a/api/data/uploads/daviddoe@strapi.io.jpg and /dev/null differ diff --git a/api/data/uploads/default-image.png b/api/data/uploads/default-image.png deleted file mode 100644 index 3d3467d..0000000 Binary files a/api/data/uploads/default-image.png and /dev/null differ diff --git a/api/data/uploads/favicon.png b/api/data/uploads/favicon.png deleted file mode 100644 index 5325337..0000000 Binary files a/api/data/uploads/favicon.png and /dev/null differ diff --git a/api/data/uploads/sarahbaker@strapi.io.jpg b/api/data/uploads/sarahbaker@strapi.io.jpg deleted file mode 100644 index 924be75..0000000 Binary files a/api/data/uploads/sarahbaker@strapi.io.jpg and /dev/null differ diff --git a/api/data/uploads/the-internet-s-own-boy.jpg b/api/data/uploads/the-internet-s-own-boy.jpg deleted file mode 100644 index 5381a5f..0000000 Binary files a/api/data/uploads/the-internet-s-own-boy.jpg and /dev/null differ diff --git a/api/data/uploads/this-shrimp-is-awesome.jpg b/api/data/uploads/this-shrimp-is-awesome.jpg deleted file mode 100644 index d001553..0000000 Binary files a/api/data/uploads/this-shrimp-is-awesome.jpg and /dev/null differ diff --git a/api/data/uploads/we-love-pizza.jpg b/api/data/uploads/we-love-pizza.jpg deleted file mode 100644 index 5a0fc58..0000000 Binary files a/api/data/uploads/we-love-pizza.jpg and /dev/null differ diff --git a/api/data/uploads/what-s-inside-a-black-hole.jpg b/api/data/uploads/what-s-inside-a-black-hole.jpg deleted file mode 100644 index 83ec497..0000000 Binary files a/api/data/uploads/what-s-inside-a-black-hole.jpg and /dev/null differ diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index 026c61b..30fa445 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -1,4 +1,5 @@ /** @type {import('next').NextConfig} */ +// https://stackoverflow.com/questions/76164057/next-js-hostname-not-configured-under-images-in-next-config-js-even-though-remot const nextConfig = { async rewrites() { return [ @@ -12,6 +13,22 @@ const nextConfig = { } ] }, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "ih1.redbubble.net", + port: "", + pathname: "/**", + }, + { + protocol: "http", + hostname: "localhost", + port: "1337", + pathname: "/**", + }, + ], + }, }; export default nextConfig; diff --git a/frontend/src/app/products/page.tsx b/frontend/src/app/products/page.tsx index cdd562e..537e05f 100644 --- a/frontend/src/app/products/page.tsx +++ b/frontend/src/app/products/page.tsx @@ -1,5 +1,5 @@ "use client"; -import React, {useState} from "react"; +import React, {useEffect, useState} from "react"; import MenuCard from "@/components/ui/MenuCard/MenuCard"; import { useParams } from "next/navigation"; import Product from "@/../public/batch1/files_list.json"; @@ -10,26 +10,28 @@ const Products = () => { const catID = useParams(); const [maxPrice, setMaxPrice] = useState(100); const [sort, setSort] = useState("asc"); + const [data, setData] = useState([]); + + useEffect(() => { + const fetchData = async () => { + const response = await fetch(process.env.NEXT_PUBLIC_API_URL +"/products?populate=*", { + method: "GET", + headers: { + Authorization: "Bearer " + process.env.NEXT_PUBLIC_API_TOKEN + } + }); + const data = await response.json(); + // console.log(data.data); + // console.log(data.data[0].image.url); + setData(data.data); + }; + fetchData(); + }, []); - async function GetData () { - // const response = await fetch("/strapi/products?=populate=*", { - const response = await fetch(process.env.NEXT_PUBLIC_API_URL +"/products?populate=*", { - method: "GET", - headers: { - Authorization: "Bearer " + process.env.NEXT_PUBLIC_API_TOKEN - } - }); - const data = await response.json(); - // console.log(data.data); - // console.log(data.data[0].image.url); - return data.data; - }; - const products = GetData(); - console.log(products); return (