Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions src/controller/cachacaController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { Request, Response } from 'express'
import { z } from 'zod'

import cachacaService from '../service/cachacaService'
import { ObjectId } from 'mongodb'

const CachacaController = {
async createRank(req: Request, res: Response) {
try {
const body: ChachacaDTO = AnoSchema.parse(req.body)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mudar para receber de req.query


const response = await cachacaService.addMoradorAoRank(body.ano)

return res.send({
message: 'Sucesso',
rank: response
})

} catch (error) {

console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error)

return res.status(500).json({ message: 'Something went wrong with server', error })
}
},
async index( req: Request, res: Response){
try {
const body: ChachacaDTO = AnoSchema.parse(req.body)
const response = await cachacaService.showRank(body.ano)

return res.send({
message: 'Sucesso',
rank: response
})

} catch (error) {
console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error)
return res.status(500).json({ message: 'Something went wrong with server', error })
}
},
async addCachaca( req: Request, res: Response){
try {
const { moradorId } = req.query
const morador = MoradorIdSchema.parse(moradorId)
const id = new ObjectId(morador)
const response = await cachacaService.addCachacaMorador(id)

return res.send({
message: 'Sucesso',
rank: response
})

} catch (error) {
console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error)
return res.status(500).json({ message: 'Something went wrong with server', error })
}
},

}

const MoradorIdSchema = z.string().refine((data) => {
// Check if the data is a string of 12 bytes
if (/^[0-9a-fA-F]{24}$/.test(data)) {
return true
}

// Check if the data is a string of 24 hex characters
if (/^[0-9a-fA-F]{24}$/.test(data)) {
return true
}

// Check if the data is an integer
if (!isNaN(+data) && Number.isInteger(+data)) {
return true
}

return false
}, {
message: 'Must be a ObjectId. A string of 12 bytes, a string of 24 hex characters, or an integer',
}).optional()

const AnoSchema = z.object({
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui é só uma bilbioteca pra validar a entrada do usuário. Assim a gente traz erros melhores quando for obrigatório algum tipo de dado. Aqui acho que vai precisar só tirar o .object e deixar o number

ano: z.number().min(2015)
})
type ChachacaDTO = z.infer<typeof AnoSchema>

export default CachacaController
4 changes: 4 additions & 0 deletions src/controller/moradorController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ const CreateMoradorSchema = z.object({
curso: z.string(),
imagem: z.string(),
instagram: z.string(),
oficial:z.boolean(),
total_cachaca:z.number(),
formado:z.boolean(),
calouro:z.boolean(),
})

const MoradorIdSchema = z.string().refine((data) => {
Expand Down
13 changes: 13 additions & 0 deletions src/models/cachaca.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { ObjectId } from 'mongodb'

class Cachaca {
constructor(
public morador_id : ObjectId,
public cachaca_para_tomar: number,
public cachaca_ja_tomada: number,
public ano_do_rank:number,
public _id?: ObjectId,
) {}
}

export default Cachaca
Comment thread
LTaka marked this conversation as resolved.
7 changes: 5 additions & 2 deletions src/models/morador.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@ class Morador {
public curso: string,
public imagem: string,
public instagram: string,
public cachaca_para_tomar: number,
public cachaca_ja_tomada: number,
public oficial: boolean,
public total_cachaca: number,
public formado: boolean,
public calouro: boolean,
public senha?: string,
public _id?: ObjectId,
public ano_saida?: number
) {}
}

Expand Down
83 changes: 83 additions & 0 deletions src/repository/cachacaRepository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { ObjectId } from 'mongodb'
import Cachaca from '../models/cachaca'
import getDatabase from '../util/database'

const CachacaRepository = {
async verificaRegistroExistente(morador_id:(ObjectId | undefined), ano:number){
try{
const database = await getDatabase()
const verify = await database
.collection('cachaca')
.findOne({
$and:[
{ morador_id: morador_id},
{ ano_do_rank: ano },
]
}) as Cachaca
return verify
}catch(error){
throw new Error(`Something wrong with server, ${error}`)
}
},

async showRankMoradores(ano: number) {
try {
const _database = await getDatabase()
const verify = (await _database
.collection('cachaca')
.find({ ano_do_rank: ano})
.sort({ cachaca_ja_tomada: -1 })
.toArray()) as Cachaca[]
return verify
} catch (error) {
throw new Error(`Algo deu errado com o servidor, ${error}`)
}
},

async addCachaca(morador_id: ObjectId): Promise<void> {
try {
const _database = await getDatabase()
// define uma nova cachaca para um morador
await _database.collection('cachaca').updateOne(
{
_id: new ObjectId(morador_id),
},
{ $inc: { cachaca_para_tomar: 1 } }
)
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}

},

async updateCachaca(morador_id: ObjectId, cachaca_ja_tomada: number, cachaca_para_tomar?: number) {
try {
const _database = await getDatabase()
await _database.collection('cachaca').updateOne(
{ _id: new ObjectId(morador_id) },
{ $inc: cachaca_para_tomar ? {
cachaca_para_tomar: cachaca_para_tomar,
cachaca_ja_tomada: cachaca_ja_tomada
} : {
cachaca_ja_tomada: cachaca_ja_tomada
}}
)
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}
},

async addMoradorAoRankCachaca(morador: Omit<Cachaca, '_id'>) {
try {
const _database = await getDatabase()
return await _database
.collection('cachaca')
.insertOne(morador)
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}
},

}

export default CachacaRepository
87 changes: 48 additions & 39 deletions src/repository/moradorRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ const MoradoresRepository = {
async getAllMoradores(id?: ObjectId): Promise<Morador[]> {
try {
const _database = await getDatabase()

const moradores = (await _database
.collection('moradores')
.find({
Expand All @@ -18,7 +17,7 @@ const MoradoresRepository = {
]
})
.sort({ cachaca_ja_tomada: -1 })
.toArray()) as Morador[];
.toArray()) as Morador[]

return moradores
} catch (error) {
Expand All @@ -27,41 +26,6 @@ const MoradoresRepository = {

},

async addCachaca(morador_id: string): Promise<void> {
try {
const _database = await getDatabase()
// define uma nova cachaca para um morador
await _database.collection('moradores').updateOne(
{
_id: new ObjectId(morador_id),
},
{ $inc: { cachaca_para_tomar: 1 } }
)
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}

},

async updateCachaca(morador_id: string, cachaca_ja_tomada: number, cachaca_para_tomar?: number) {
try {
const _database = await getDatabase()
await _database.collection('moradores').updateOne(
{ _id: new ObjectId(morador_id) },
{
$inc: cachaca_para_tomar ? {
cachaca_para_tomar: cachaca_para_tomar,
cachaca_ja_tomada: cachaca_ja_tomada
} : {
cachaca_ja_tomada: cachaca_ja_tomada
}
}
)
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}
},

async getOneMorador(morador_id: string): Promise<Morador> {
try {
const _database = await getDatabase()
Expand Down Expand Up @@ -96,7 +60,6 @@ const MoradoresRepository = {
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}

},

async changePassword(name: string, new_password: string) {
Expand Down Expand Up @@ -134,7 +97,53 @@ const MoradoresRepository = {
} catch (error) {
throw new Error(`Something wrong with database, ${error}`)
}
}
},

async getAllMoradores_oficiais(){
try {
const _database = await getDatabase()

const moradores_oficiais = (await _database
.collection('moradores')
.find({ oficial: true})
.toArray()) as Morador[]

return moradores_oficiais
} catch (error) {
throw new Error(`Something wrong with server, ${error}`)
}

},
async updateEvolvesVeteran(morador_id:ObjectId) {
try{
const _database = await getDatabase()
await _database
.collection('moradores')
.updateOne({ _id: morador_id }, { $set: {calouro: false}})
}catch(error){
throw new Error(`Something wrong with server, ${error}`)
}
},
async upadteNotOfficial(morador_id:ObjectId) {
try{
const _database = await getDatabase()
await _database
.collection('moradores')
.updateOne({ _id: morador_id }, { $set: {oficial: false}})
}catch(error){
throw new Error(`Something wrong with server, ${error}`)
}
},
async upadteFormed(morador_id:ObjectId) {
try{
const _database = await getDatabase()
await _database
.collection('moradores')
.updateOne({ _id: morador_id }, { $set: {formado: true}})
}catch(error){
throw new Error(`Something wrong with server, ${error}`)
}
},
}

export default MoradoresRepository
8 changes: 8 additions & 0 deletions src/routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import MoradoresController from '../controller/moradorController'
import SessionController from '../controller/sessionController'
import CheckoutController from '../controller/checkoutController'
import ProdutosController from '../controller/produtosController'
import CachacaController from '../controller/cachacaController'


import validateJWT from '../middleware/validateJWT'
import upload from '../middleware/upload'
Expand Down Expand Up @@ -42,5 +44,11 @@ route.post('/produtos/upload-file', upload('photo'), ProdutosController.uploadPr

route.post('/webhooks', WebhookController.webhook)

route.post('/cachaca',CachacaController.createRank)
route.get('/cachaca',CachacaController.index)
// route.put('/cachaca',CachacaController.index)




export default route
Loading