diff --git a/.env.example b/.env.example index a5c53d4..5fb4fac 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ PORT= MONGO_DB= HASH_KEY= +SECRET= \ No newline at end of file diff --git a/src/api.ts b/src/api.ts index 017f57f..7f0c8b5 100644 --- a/src/api.ts +++ b/src/api.ts @@ -4,38 +4,32 @@ import helmet from "helmet"; import cors from "cors"; import { config } from "dotenv"; import { join } from "path"; -import Users from "./models/users.model"; +import { + allUsers, + createUser, + editUser, + login, + viewUser, +} from "./controllers/users.controlers"; config({ path: join(__dirname, "../.env") }); const PORT = process.env.PORT; const app = express(); + app.use(cors()); +app.use(helmet()); app.use(morgan("combined")); -app.use(express.urlencoded({ extended: true })); app.use(express.json()); -app.use(helmet()); +app.use(express.urlencoded({ extended: true })); app.disable("x-powered-by"); -const users = new Users(); +// ROUTES app.get("/", (req, res) => res.json({ message: "Virtual Wallet" })); - -app.post("/users", async (req, res) => { - try { - const resp = await users.createUser(req.body); - return res.status(201).send(resp); - } catch (err: any) { - res.status(500).json({ message: "Deu ruim" }); - } -}); - -app.get("/users", async (req, res) => { - try { - const resp = await users.allUsers(); - return res.status(200).send(resp); - } catch (error) { - res.status(500).json({ message: "Deu ruim" }); - } -}); +app.post("/users", createUser); +app.patch("/users/:id", editUser); +app.post("/login", login); +app.get("/users/:id", viewUser); +app.get("/users", allUsers) app.listen(PORT, () => console.log(`Running on `)); diff --git a/src/controllers/users.controlers.ts b/src/controllers/users.controlers.ts index 6f4d2fa..4461790 100644 --- a/src/controllers/users.controlers.ts +++ b/src/controllers/users.controlers.ts @@ -17,6 +17,43 @@ export const createUser = async (req: Request, res: Response) => { } }; +export const editUser = async (req: Request, res: Response) => { + try { + const updatedUser = await users.updateUser(req.params.id, req.body); + console.log(updatedUser); + delete updatedUser.value.password; + delete updatedUser.value._id; + return res.status(200).send(updatedUser.value); + } catch (error) { + res.status(500).json(error); + } +}; + +export const viewUser = async (req: Request, res: Response) => { + try { + const user = await users.findUser(req.params.id); + delete user.password; + return res.status(200).send(user); + } catch (error) { + res.status(500).json(error); + } +}; + +export const allUsers = async (req: Request, res: Response) => { + try { + const resp = await users.filterUser({}); + + return res.status(200).send( + resp.map((user) => { + delete user.password; + return user; + }) + ); + } catch (error) { + res.status(500).json(error); + } +}; + export const login = async (req: Request, res: Response) => { try { const auth = await users.filterUser({ @@ -24,14 +61,15 @@ export const login = async (req: Request, res: Response) => { password: hashPassword(req.body.password), }); - if (length > 0) { + if (auth.length > 0) { const token = jwt.sign({ id: auth[0]._id }, SECRET, { - algorithm: "RS256", + expiresIn: 300, // expires /s }); - return res.status(200).send(token); + await users.updateUser(auth[0]._id, { isLogged: true }); + return res.status(200).send({ token: token }); } - return res.status(400).json({ message: "Campos inválidos" }); + return res.status(400).json({ message: "Úsuario ou senha inválidos" }); } catch (error: any) { res.status(500).json(error); } diff --git a/src/interfaces.ts b/src/interfaces.ts index 8b824ab..4c799e1 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -13,4 +13,5 @@ export interface IQueryUsers { password?: string; cpf?: string; tel?: string; + isLogged?: boolean; } diff --git a/src/models/users.model.ts b/src/models/users.model.ts index 4ea0fdc..847d35a 100644 --- a/src/models/users.model.ts +++ b/src/models/users.model.ts @@ -58,10 +58,9 @@ class Users { async updateUser(userId: string, body: IQueryUsers) { try { - const user = await cursor + return await cursor .collection("users") .findOneAndUpdate({ _id: ObjectId(userId) }, { $set: body }); - return user; } catch (error: any) { console.error(error); throw new Error(error.message);