Skip to content

Commit a1ad8ab

Browse files
committed
added OpenAi controllers and configurations
1 parent bacdd8f commit a1ad8ab

File tree

10 files changed

+186
-10
lines changed

10 files changed

+186
-10
lines changed

frontend/src/components/GeneratedImageCard.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@ import { CircularProgress } from '@mui/material'
22
import React from 'react'
33
import styled from 'styled-components'
44

5-
const Container = styled.dev`
5+
const Container = styled.div`
66
flex:1;
77
padding: 16px;
88
display: flex;
9+
border-radius: 20px;
10+
align-items: center;
11+
justify-content: center;
912
min-height:300px;
1013
gap: 16px;
1114
flex-direction: column;
1215
border:2px dashed ${({theme}) => theme.yellow};
1316
color: ${({theme}) => theme.arrow + 80};
14-
border-radius: 20px;
15-
align-items: center;
16-
justify-content: center;
17+
1718
`
1819

1920
const Image = styled.img`
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import dotenv from "dotenv";
2+
import { createError } from "../utils/error";
3+
import {Configuration, OpenAIApi} from "openai";
4+
5+
dotenv.config();
6+
7+
8+
const configuration = new Configuration({
9+
apiKey: process.env.OPEN_AI_SECRET_KEY
10+
})
11+
12+
const openai = new OpenAIApi(configuration);
13+
14+
export const generateImage = async(req, res, next) => {
15+
try {
16+
const {prompt} = req.body;
17+
18+
const response = await openai.createImage({
19+
prompt,
20+
n:1,
21+
size: "1024x1024",
22+
response_format: "b64_json"
23+
})
24+
const generateImage = response.data.data[0].b64_json;
25+
return res.status(200).json({photo: generateImage});
26+
} catch (error) {
27+
next(createError(error.status, error?.response?.data?.error?.message || error?.message));
28+
}
29+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import Post from "../models/Posts.model";
2+
import dotenv from "dotenv"
3+
import { createError } from "../utils/error";
4+
import { v2 as cloudinary } from 'cloudinary';
5+
6+
cloudinary.config({
7+
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
8+
api_key: process.env.CLOUDINARY_API_KEY,
9+
api_secret: process.env.CLOUDINARY_API_SECRET,
10+
});
11+
12+
export const getAllPosts = async(req, res, next) => {
13+
try {
14+
const posts = await Post.find({});
15+
return res.status(200).json({success: true, data: posts})
16+
} catch (error) {
17+
next(createError(error.status, error?.response?.data?.error?.message || error?.message));
18+
}
19+
}
20+
21+
export const createPost = async (req, res, next) => {
22+
try {
23+
const {name, prompt, photo} = req.body;
24+
const photoUrl = await cloudinary.uploader.upload(photo);
25+
const newPost = await Post.create({
26+
name,
27+
prompt,
28+
photo: photoUrl?.secure_url,
29+
});
30+
31+
return res.status(201).json({success:true, data: newPost});
32+
} catch (error) {
33+
next(createError(error.status, error?.response?.data?.error?.message || error?.message));
34+
}
35+
}

server/models/Posts.model.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import mongoose, { Schema } from 'mongoose'
2+
3+
const PostSchema = new Schema({
4+
name:{
5+
type: String,
6+
required: true
7+
},
8+
prompt: {
9+
type: String,
10+
required: true,
11+
},
12+
photo: {
13+
type: String,
14+
required: true,
15+
},
16+
},{timestamps:true});
17+
18+
const Post = mongoose.model("Post", PostSchema);
19+
20+
export default Post;

server/package-lock.json

Lines changed: 49 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
"type": "module",
66
"main": "server.js",
77
"scripts": {
8-
"start":"nodemon server.js"
9-
8+
"start": "nodemon server.js"
109
},
1110
"author": "sanjay rai",
1211
"license": "ISC",
@@ -15,6 +14,7 @@
1514
"cors": "^2.8.5",
1615
"dotenv": "^16.4.5",
1716
"express": "^4.19.2",
17+
"mongodb": "^6.8.0",
1818
"mongoose": "^8.4.5",
1919
"nodemon": "^3.1.4",
2020
"openai": "^4.52.3"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import express from "express";
2+
import { createPost, getAllPosts } from "../controllers/Posts.controller";
3+
import { generateImage } from "../controllers/GenerateAIImage.controller";
4+
5+
const router = express.Router();
6+
7+
router.post("/", generateImage);
8+
9+
export default router;
10+

server/routes/Posts.route.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import express from "express";
2+
import { createPost, getAllPosts } from "../controllers/Posts.controller";
3+
4+
const router = express.Router();
5+
6+
router.get("/", getAllPosts);
7+
router.post("/", createPost);
8+
export default router;
9+

server/server.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ import cors from "cors";
22
import mongoose from "mongoose";
33
import dotenv from "dotenv";
44
import express from "express";
5+
import PostRouter from "./routes/Posts.route";
6+
import GenerateImageRouter from "./routes/GenerateAIImage.route";
57

68
dotenv.config();
7-
const app = express();
89

10+
const app = express();
911
const PORT = process.env.PORT || 8080;
12+
const URL = process.env.MONGODB_URI;
1013

1114
//========== default middlewares ===================
1215
app.use(cors());
@@ -22,6 +25,9 @@ app.use((err,req,res,next)=>{
2225
})
2326
})
2427

28+
29+
app.use("/api/v1/post", PostRouter);
30+
app.use("/api/v1/generateImage", GenerateImageRouter)
2531
//=========== Default route =============
2632
app.get("/", async (req,res) => {
2733
res.status(200).json({
@@ -30,9 +36,23 @@ app.get("/", async (req,res) => {
3036
})
3137

3238

39+
40+
//============ Connect to mongodb ==============
41+
const connectDB = () => {
42+
mongoose.set("strictQuery", true);
43+
mongoose.connect(URL)
44+
.then(() => {
45+
console.log("Successfully Connected MongoDB...!!");
46+
})
47+
.catch((err) => {
48+
console.error("Failed to Connect to DB");
49+
})
50+
}
51+
3352
//============ Server Running Function ===================
3453
const startServer = () =>{
3554
try {
55+
connectDB()
3656
app.listen(PORT, () => {
3757
console.log("Server started on Port: ",PORT);
3858
})

server/utils/error.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const createError = (status, message) => {
2+
const err = new Error();
3+
err.status = status;
4+
err.message = message;
5+
return err;
6+
}

0 commit comments

Comments
 (0)