Skip to content

Commit d373a9c

Browse files
committed
🌟 add mongodb
1 parent 47af99f commit d373a9c

File tree

9 files changed

+990
-20
lines changed

9 files changed

+990
-20
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
node_modules
2-
.next
2+
.next
3+
.env

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
},
1414
"dependencies": {
1515
"framer-motion": "^7.10.0",
16+
"mongodb": "^4.13.0",
1617
"next": "^13.0.7",
1718
"react": "^18.2.0",
1819
"react-dom": "^18.2.0",
1920
"react-scroll": "^1.8.9",
2021
"three": "^0.147.0"
2122
},
2223
"devDependencies": {
24+
"@types/mongodb": "^4.0.7",
2325
"@types/node": "^18.11.15",
2426
"@types/react": "^18.0.26",
2527
"axios": "^1.2.1",

src/components/Form/Buttons/Buttons.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import Link from "next/link"
77

88
function Buttons({ statusLogin, state, setState }) {
99

10-
const [data, setData] = useState({})
11-
1210
const c_btn = useRef<any>(null)
1311
const c_btn_span = useRef<any>(null)
1412
const c_btn_create_span = useRef<any>(null)

src/components/Form/Form.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// styles
22
import styles from "./Form.module.scss"
33
// react hooks
4-
import { FormEvent, useState } from "react"
5-
4+
import { FormEvent, useEffect, useState } from "react"
5+
// axios
6+
import axios from "axios"
67
// components
78
import SignIn from "./SignIn/SignIn"
89
import SignUp from "./SignUp/SignUp"
@@ -12,23 +13,38 @@ import Footer from "./Footer/Footer"
1213
function Form({ state, setState }) {
1314
const [statusLogin, setStatusLogin] = useState<Boolean>(false)
1415
const [path, setPath] = useState<String>('/')
16+
const [data, setData] = useState({})
1517

1618
function verifyIfCanSubmit(e: FormEvent) {
1719
// se dados estiverem ok
1820
if (statusLogin) {
21+
22+
// let responseFromAxios = axios.get("/api/submit")
23+
// .then(resp => resp.data)
24+
// .then(resp => JSON.stringify(resp))
25+
// .catch(err => console.log("err: ", err))
26+
1927
if (state == 'signUp') {
2028
// se o formulario for do tipo cadastro, va para o login
29+
axios.post("/api/submit", data)
2130
setPath('/')
2231
} else {
2332
// se o formulario for do tipo login, va para home
24-
setPath('/logged')
33+
axios.post("/api/submit", data)
34+
setPath('/logged/')
2535
}
2636
} else {
2737
console.log('Not yet')
2838
e.preventDefault()
2939
}
3040
}
3141

42+
// useEffect(() => {
43+
// let responseFromAxios = axios.get("/api/submit")
44+
// .then(resp => resp.data)
45+
// .then(resp => resp.message)
46+
// console.log(responseFromAxios)
47+
// })
3248

3349
return (
3450
<form
@@ -37,9 +53,9 @@ function Form({ state, setState }) {
3753
action={`${path}`}>
3854
<div className={styles.tick} />
3955
{state == 'signIn' ?
40-
<SignIn setStatusLogin={setStatusLogin} />
56+
<SignIn setData={setData} setStatusLogin={setStatusLogin} />
4157
:
42-
<SignUp setStatusLogin={setStatusLogin} />}
58+
<SignUp setData={setData} setStatusLogin={setStatusLogin} />}
4359
<Buttons setState={setState} state={state} statusLogin={statusLogin} />
4460
<Footer />
4561
</form>

src/components/Form/SignIn/SignIn.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import Input from "../Input/Input"
1111
// types
1212
import { UserProps } from "../../../types/UserProps"
1313

14-
function SignIn({ setStatusLogin }) {
14+
function SignIn({ setStatusLogin, setData }) {
1515

1616

1717
const [email, setEmail] = useState<String>('')
1818
const [pass, setPass] = useState<String>('')
1919

20+
2021
function validEmail(email: any) {
2122
var regexEmail = new RegExp('[a-zA-Z0-9-_!.]+@+[a-zA-Z0-9]+[.]+[a-zA-Z0-9]')
2223
return regexEmail.test(email) ? true : false
@@ -28,8 +29,12 @@ function SignIn({ setStatusLogin }) {
2829
}
2930

3031
function formValidation(email: String, pass: String) {
31-
return validEmail(email) && validPass(pass) ?
32-
setStatusLogin(true) : setStatusLogin(false)
32+
if (validEmail(email) && validPass(pass)) {
33+
setStatusLogin(true)
34+
setData({ email, pass })
35+
} else {
36+
setStatusLogin(false)
37+
}
3338
}
3439

3540
useEffect(() => {

src/components/Form/SignUp/SignUp.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ import styles from "../Form.module.scss"
44
import { AiOutlineUser } from "react-icons/ai"
55
import { RiLockPasswordLine } from "react-icons/ri"
66
// React Hooks
7-
import { FormEvent, InputHTMLAttributes, useEffect, useState } from "react"
7+
import { useEffect, useState } from "react"
88
// Components
99
import Header from "../Header/Header"
1010
import Input from "../Input/Input"
1111
// types
1212
import { UserProps } from "../../../types/UserProps"
13-
import EventEmitter from "events"
1413

15-
function SignUp({ setStatusLogin }) {
14+
function SignUp({ setStatusLogin, setData }) {
1615

1716
const [username, setUsername] = useState<String>('')
1817
const [email, setEmail] = useState<String>('')
@@ -39,14 +38,16 @@ function SignUp({ setStatusLogin }) {
3938
}
4039

4140
function formValidation(username: String, email: String, pass: String, passConfirm: String) {
42-
return validUsername(username) &&
41+
if (validUsername(username) &&
4342
validEmail(email) &&
4443
validPass(pass) &&
45-
validPassConfirm(passConfirm)
46-
?
44+
validPassConfirm(passConfirm)) {
45+
setData({ username, email, pass })
4746
setStatusLogin(true)
48-
:
47+
}
48+
else {
4949
setStatusLogin(false)
50+
}
5051
}
5152

5253
useEffect(() => {

src/pages/api/submit.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
1-
export default (request, response) => {
1+
import { MongoClient, Db } from "mongodb";
2+
import url from "url";
3+
4+
let cacheDb: Db = null;
5+
6+
async function connectToDatabase(uri: string) {
7+
if (cacheDb) {
8+
return cacheDb;
9+
}
10+
11+
const client = await MongoClient.connect(uri, {
12+
useNewUrlParser: true,
13+
useUnifiedTopology: true,
14+
});
15+
16+
const dbName = url.parse(uri).pathname.substring(1);
17+
// substring pula 1 caractere e pega o q vem depois
18+
const db = client.db(dbName);
19+
20+
cacheDb = db;
21+
22+
return db;
23+
}
24+
25+
export default async (request, response) => {
226
const { username, pass, email } = request.body;
327

4-
return response.json({ message: `${username} | ${pass} | ${email} ` });
28+
const db = await connectToDatabase(process.env.MONGODB_URI);
29+
const collection = db.collection("users");
30+
31+
await collection.insertOne({
32+
username,
33+
pass,
34+
email,
35+
});
36+
37+
return response.status(201).json({ ok: true });
538
};

src/pages/logged/index.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,17 @@ import AnimatedPage from "../../styles/animations/AnimatedPage"
88
// components
99
import Menu from "../../components/Menu/Menu"
1010
import MyNotes from "../../components/MyNotes/MyNotes"
11+
import { useEffect } from "react"
1112

1213
function Logged() {
14+
15+
useEffect(() => {
16+
if (localStorage !== undefined) {
17+
const usuario = JSON.parse(localStorage.getItem('user'))
18+
console.log(usuario)
19+
}
20+
})
21+
1322
return (
1423
<div className={styles.container}>
1524
<Head>

0 commit comments

Comments
 (0)