Skip to content

Commit

Permalink
implement isdigram using mongo (retrievePosts & logoutUser WIP) b00tc…
Browse files Browse the repository at this point in the history
  • Loading branch information
PereHDZ committed Apr 14, 2024
1 parent 5e1ee34 commit b595e66
Show file tree
Hide file tree
Showing 70 changed files with 9,047 additions and 2,043 deletions.
241 changes: 185 additions & 56 deletions staff/pere-hernandez/app/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,76 +1,205 @@
import { MongoClient } from "mongodb"
import express from 'express'
import logic from './logic/index.js'
import logic from "./logic/index.ts"
import { errors } from 'com'
import tracer from 'tracer'
import colors from 'colors'

const logger = tracer.colorConsole({
filters: {
debug: colors.green,
info: colors.blue,
warn: colors.yellow,
error: colors.red
}
})

const api = express()
const { ContentError, SystemError, DuplicityError, CredentialsError, NotFoundError, StatusError } = errors

const jsonBodyParser = express.json()
const client = new MongoClient('mongodb://localhost:27017')

api.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', '*')
res.setHeader('Access-Control-Allow-Headers', '*')
client.connect()
.then(connection => {
const db = connection.db('isdigram')

next()
})
const users = db.collection('users')
const posts = db.collection('posts')

api.post('/users', jsonBodyParser, (req, res) => {
try {
const { username, email, password, confirmedPassword } = req.body
logic.users = users
logic.posts = posts

logic.registerUser(username, email, password, confirmedPassword, error => {
if (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })
const api = express()

return
}
const jsonBodyParser = express.json()

res.status(201).send()
})
} catch (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })
}
})

api.post('/users/auth', jsonBodyParser, (req, res) => {
try {
const { username, password } = req.body
api.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Methods', '*')
res.setHeader('Access-Control-Allow-Headers', '*')

logic.loginUser(username, password, (error, user) => {
if (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })
next()
})

return
api.post('/users', jsonBodyParser, (req, res) => {
try {
const { username, email, password, confirmedPassword } = req.body

logic.registerUser(username, email, password, confirmedPassword, error => {
if (error) {
if (error instanceof SystemError){
logger.error(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof DuplicityError){
logger.warn(error.message)

res.status(409).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof CredentialsError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
}
return
}
res.status(201).send()
})
} catch (error) {
if (error instanceof TypeError || error instanceof ContentError){
logger.warn(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
}
}

res.json(user)
})
} catch (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })
}
})

api.get('/users/:userId', (req, res) => {
try {
const { userId } = req.params
logic.retrieveUser(userId, (error, user) => {
if (error) {
res.status(500).json({ error: error.constructor.name, message: error.message })
api.post('/users/auth', jsonBodyParser, (req, res) => {
try {
const { username, password } = req.body

logic.loginUser(username, password, (error, userId) => {
if (error) {
if (error instanceof SystemError){
logger.error(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof CredentialsError){
logger.warn(error.message)

res.status(401).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof NotFoundError){
logger.warn(error.message)

res.status(404).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof StatusError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
}
return
}
res.status(201).json(userId)
})
} catch (error) {
if (error instanceof TypeError || error instanceof ContentError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
} else {
logger.warn(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
}
}
})

return
api.patch('/users/:userId', (req, res) => {
try {
const { userId } = req.params

logic.logoutUser(userId.toString(), (error, userId) => {
if (error) {
if (error instanceof SystemError){
logger.error(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof NotFoundError){
logger.warn(error.message)

res.status(404).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof StatusError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
}
return
}
res.status(200).json(userId)
})
} catch (error) {
if (error instanceof TypeError || error instanceof ContentError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
} else {
logger.warn(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
}
}
})

res.json(user)
api.get('/users/:targetUserId', (req, res) => {
try {
const { authorization: userId } = req.headers

const { targetUserId } = req.params

logic.retrieveUser(userId, targetUserId, (error, user) => {
if (error) {
if (error instanceof SystemError) {
logger.error(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
} else if (error instanceof NotFoundError){
logger.warn(error.message)

res.status(404).json({ error: error.constructor.name, message: error.message })
}
return
}
res.json(user)
})
} catch (error) {
if (error instanceof TypeError || error instanceof ContentError){
logger.warn(error.message)

res.status(406).json({ error: error.constructor.name, message: error.message })
} else {
logger.warn(error.message)

res.status(500).json({ error: error.constructor.name, message: error.message })
}
}
})
} catch (error) {
res.status(404).json({ error: error.constructor.name, message: error.message})
}
})

/*api.patch('/users/:userId', jsonBodyParser, (req, res) => {
try {
const { userId } = req.params
logic.retrieveUser
}
})*/
api.post('/posts', jsonBodyParser, (req, res) => {
try {
const { authorization: userId } = req.headers

const { image, comment } = req.body

logic.createPost(userId, image, comment, error => {
if (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })

api.listen(8000, () => console.log('API listeninig on port 8000'))
return
}
res.status(201).send()
})
} catch (error) {
res.status(400).json({ error: error.constructor.name, message: error.message })
}
})
api.listen(8000, () => logger.info('API listening on port 8000'))
})
.catch(error => logger.error(error))
Loading

0 comments on commit b595e66

Please sign in to comment.