From 5f03ef679f886dc7b44e7df12b81e47242acb246 Mon Sep 17 00:00:00 2001 From: Juthatip McDevitt Date: Thu, 2 May 2024 18:10:20 -0500 Subject: [PATCH] updated server side and added post image functionality --- ai_image_generator/README.md | 25 +++++++ ai_image_generator/client/src/api/index.js | 9 +++ .../client/src/components/Card.jsx | 2 +- .../client/src/components/GenerateForm.jsx | 38 +++++++++-- .../client/src/components/Image.jsx | 0 ai_image_generator/client/src/pages/Home.jsx | 68 +++++++++++++++---- .../server/controllers/ImageGenerate.js | 29 ++++++++ ai_image_generator/server/controllers/Post.js | 42 ++++++++++++ ai_image_generator/server/error.js | 6 ++ ai_image_generator/server/index.js | 57 ++++++++++++++++ ai_image_generator/server/models/Post.js | 19 ++++++ ai_image_generator/server/package-lock.json | 1 + ai_image_generator/server/package.json | 4 +- .../server/routes/ImageGenerate.js | 7 ++ ai_image_generator/server/routes/Posts.js | 8 +++ 15 files changed, 292 insertions(+), 23 deletions(-) create mode 100644 ai_image_generator/client/src/api/index.js delete mode 100644 ai_image_generator/client/src/components/Image.jsx create mode 100644 ai_image_generator/server/controllers/ImageGenerate.js create mode 100644 ai_image_generator/server/controllers/Post.js create mode 100644 ai_image_generator/server/error.js create mode 100644 ai_image_generator/server/index.js create mode 100644 ai_image_generator/server/models/Post.js create mode 100644 ai_image_generator/server/routes/ImageGenerate.js create mode 100644 ai_image_generator/server/routes/Posts.js diff --git a/ai_image_generator/README.md b/ai_image_generator/README.md index e69de29..db7573b 100644 --- a/ai_image_generator/README.md +++ b/ai_image_generator/README.md @@ -0,0 +1,25 @@ +# In this project we craete the application called "DELL-E Image Genartor" by using React + +DELL-E Image Generator is the application that is used for creating images by describing what you want to see! After generating images, you can post and download your images. + +This project uses OpenAI to generate images and cloudinary to store images. + +## How to use this application on your local? +* You will need OpenAI API key +* You will need Cloudinary API Key +* You will also need to connect with MongoDB +* Create a `.env` file. This file is used to store the keys that access the API services and the database +```bash +touch .env # to create the .env file +echo 'MONGODB_URL=""' >> .env +echo 'CLOUD_NAME=""' >> .env +echo 'CLOUD_API_KEY=""' >> .env +echo 'CLOUD_SECRET=""' >> .env +echo 'OPENAI_API_KEY=""' >> .env +``` +Fill in the information with your keys to complete the .env file. + +## To start the project + +* `npm start` on client side +* `npm start` on server side diff --git a/ai_image_generator/client/src/api/index.js b/ai_image_generator/client/src/api/index.js new file mode 100644 index 0000000..2351e29 --- /dev/null +++ b/ai_image_generator/client/src/api/index.js @@ -0,0 +1,9 @@ +import axios from "axios" + +const API = axios.create({ + baseURL: "http://localhost:8080/api/", +}); + +export const GetPosts = async () => await API.get("/post/"); +export const CreatePost = async (data) => await API.post("/post/", data) +export const GenerateAIImage = async (data) => await API.post("/generateImage/", data) \ No newline at end of file diff --git a/ai_image_generator/client/src/components/Card.jsx b/ai_image_generator/client/src/components/Card.jsx index e55cdde..98e9d56 100644 --- a/ai_image_generator/client/src/components/Card.jsx +++ b/ai_image_generator/client/src/components/Card.jsx @@ -18,7 +18,7 @@ const Card = ({item}) => {

{item?.prompt}

-

{item?.author[0]}{item.author}

+

{item?.name[0]}{item.name}

diff --git a/ai_image_generator/client/src/components/GenerateForm.jsx b/ai_image_generator/client/src/components/GenerateForm.jsx index 3774b07..b2228cc 100644 --- a/ai_image_generator/client/src/components/GenerateForm.jsx +++ b/ai_image_generator/client/src/components/GenerateForm.jsx @@ -1,15 +1,36 @@ -import React from 'react' +import React, { useState } from 'react' +import { CreatePost, GenerateAIImage } from '../api'; +import { useNavigate } from 'react-router-dom' const GenerateForm = ({post, setPost, postLoading, setPostLoading, imgLoading, setImgLoading}) => { - const generateImageFunction = () => { - setImgLoading(true) + const [error, setError] = useState(""); + const route = useNavigate() + + const generateImageFunction = async () => { + setImgLoading(true); + await GenerateAIImage({prompt: post.prompt}).then((res) => { + setPost({...post, photo: `data: image/jpge;base64,${res?.data?.photo}`}) + setImgLoading(false) + }).catch((error) => { + setError(error?.response?.data?.message) + setImgLoading(false) + console.log(error) + }) } - const creatPostFunction = () => { + const creatPostFunction = async () => { setPostLoading(true) + await CreatePost(post).then((res) => { + setPostLoading(false); + route('/'); + + }).catch((error) => { + setError(error?.response?.data?.message) + setPostLoading(false) + }) } return ( -
+

Generate an image with your prompt

@@ -18,10 +39,13 @@ const GenerateForm = ({post, setPost, postLoading, setPostLoading, imgLoading, s setPost({...post, name: e.target.value})} className='bg-transparent border rounded-sm p-2 outline-none'/>

Prompt