From c7c281b46c7a1292249af0478417e13c749fe22a Mon Sep 17 00:00:00 2001 From: LTaka Date: Fri, 15 Mar 2024 10:00:03 -0300 Subject: [PATCH 1/8] cachaca introducao e modificacao em morador --- src/controller/cachacaController.ts | 34 +++++++ src/models/cachaca.ts | 12 +++ src/models/morador.ts | 7 +- src/repository/cachacaRepository.ts | 139 ++++++++++++++++++++++++++++ src/routes/index.ts | 8 ++ src/service/cachacaService.ts | 43 +++++++++ 6 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 src/controller/cachacaController.ts create mode 100644 src/models/cachaca.ts create mode 100644 src/repository/cachacaRepository.ts create mode 100644 src/service/cachacaService.ts diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts new file mode 100644 index 0000000..6372272 --- /dev/null +++ b/src/controller/cachacaController.ts @@ -0,0 +1,34 @@ +import { Request, Response } from 'express' + +import cachacaService from '../service/cachacaService' + +const CachacaController = { + async index(req: Request, res: Response) { + try { + const response = await cachacaService.show() + + return res.send({ + message: response ? 'Sucesso' : 'Erro', + moradores: 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 changePassword(req: Request, res: Response) { +// const { name, new_password } = req.body +// try { +// await moradoresService.changePassword(name, new_password) + +// return res.send({ +// message: 'Sucesso' +// }) +// } catch (error) { +// console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error) +// return res.status(500).json({ message: 'Something went wrong with server', error }) +// } +// } +} +export default CachacaController \ No newline at end of file diff --git a/src/models/cachaca.ts b/src/models/cachaca.ts new file mode 100644 index 0000000..04478c3 --- /dev/null +++ b/src/models/cachaca.ts @@ -0,0 +1,12 @@ +import { ObjectId } from 'mongodb' + +class Cachaca { + constructor( + public _id: ObjectId, + public cachaca_para_tomar: number, + public cachaca_ja_tomada: number, + public ano_do_rank:number, + ) {} +} + +export default Cachaca diff --git a/src/models/morador.ts b/src/models/morador.ts index bb292b8..6a59687 100644 --- a/src/models/morador.ts +++ b/src/models/morador.ts @@ -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 ) {} } diff --git a/src/repository/cachacaRepository.ts b/src/repository/cachacaRepository.ts new file mode 100644 index 0000000..108ff8a --- /dev/null +++ b/src/repository/cachacaRepository.ts @@ -0,0 +1,139 @@ +import { ObjectId } from 'mongodb' + +import Morador from '../models/morador' +import Cachaca from '../models/cachaca' +import getDatabase from '../util/database' + +const CachacaRepository = { + + async getAllMoradores(): Promise { + try { + const _database = await getDatabase() + + const moradores = (await _database + .collection('cachaca') + .find({ cachaca_para_tomar: { $exists: true } , }) // retira selina dos moradores + .sort({ cachaca_ja_tomada: -1 }) // ordenas pelos q tomaram mais cachaca + .toArray()) as Morador[] + + return moradores + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + + }, + + async addCachaca(morador_id: string): Promise { + 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 { + try { + const _database = await getDatabase() + const [morador] = (await _database + .collection('moradores') + .find({ _id: new ObjectId(morador_id) }) + .toArray()) as Morador[] + return morador + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + }, + + async getMorador(name: string) { + try { + const _database = await getDatabase() + return await _database + .collection('moradores') + .findOne({ apelido: name }) as Morador + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + + }, + // async getMoradoresOficiais() { + // try { + // const _database = await getDatabase() + // return await _database + // .collection('moradores') + // .find({ oficial: true }) + // .toArray() as Morador[] + // } catch (error) { + // throw new Error(`Something wrong with server, ${error}`) + // } + // }, + async createRankMoradores(morador: Morador, ano_de_inicio:number ) { + try { + const _database = await getDatabase() + + console.log(_database) + const moradores = await _database + .collection('moradores') + .find({ oficial: { $exists: true } }) + .toArray() as Morador[] + + const moradoresRanks: Morador[] = moradores.map((morador) => ({ + _id: morador._id, + apelido: morador.apelido, + imagem: morador.imagem, + instagram: morador.instagram, + ano_de_inicio, + cachaca_para_tomar: 0, + cachaca_ja_tomada: 0, + })) + return await _database + .collection('cachaca') + .insertMany(moradoresRanks) + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + + }, + + + + + + + async changePassword(name: string, new_password: string) { + try { + const _database = await getDatabase() + await _database.collection('moradores') + .updateOne({ apelido: name }, { $set: { senha: new_password } }) + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + + }, +} + +export default MoradoresRepository diff --git a/src/routes/index.ts b/src/routes/index.ts index bd3da3c..412559b 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -4,6 +4,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' @@ -26,5 +28,11 @@ route.post('/produtos/upload-file', upload, ProdutosController.uploadProductFile route.post('/webhooks', WebhookController.webhook) +route.post('/cachaca',CachacaController.index) +route.get('/cachaca',CachacaController.index) +route.put('/cachaca',CachacaController.index) + + + export default route diff --git a/src/service/cachacaService.ts b/src/service/cachacaService.ts new file mode 100644 index 0000000..f7968a8 --- /dev/null +++ b/src/service/cachacaService.ts @@ -0,0 +1,43 @@ +import CachacaRepository from '../repository/cachacaRepository' +import returnHashString from '../util/crypto' + +const cachacaService = { + async show() { + try { + const moradores = await CachacaRepository.getAllMoradores() + return moradores + } catch (error) { + throw new Error('Erro no servidor') + } + + }, + + async showOne(name: string) { + try { + const moradores = await CachacaRepository.getMorador(name) + + return moradores + } catch (error) { + throw new Error('Erro no servidor') + } + }, + + async changePassword(name: string, new_password: string) { + try { + const morador = await CachacaRepository.getMorador(name) + + if (!morador) { + throw new Error('User not found') + } + + const new_password_hash = returnHashString(new_password) + + await CachacaRepository.changePassword(name, new_password_hash) + } catch (error) { + throw new Error('Could not change password') + } + } + +} + +export default cachacaService From cd48137bb5d303fee6935409001c4dbf7501d08a Mon Sep 17 00:00:00 2001 From: LTaka Date: Fri, 15 Mar 2024 16:17:57 -0300 Subject: [PATCH 2/8] =?UTF-8?q?add=20morador=20ao=20rank.=20modifica=C3=A7?= =?UTF-8?q?=C3=A3o=20no=20service=20morador.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/cachacaController.ts | 14 ---- src/controller/moradorController.ts | 4 ++ src/repository/cachacaRepository.ts | 104 +++++----------------------- src/repository/moradorRepository.ts | 62 +++++++---------- src/service/cachacaService.ts | 64 +++++++++-------- src/service/moradorService.ts | 10 ++- 6 files changed, 88 insertions(+), 170 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index 6372272..cd6bc45 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -16,19 +16,5 @@ const CachacaController = { return res.status(500).json({ message: 'Something went wrong with server', error }) } } - -// async changePassword(req: Request, res: Response) { -// const { name, new_password } = req.body -// try { -// await moradoresService.changePassword(name, new_password) - -// return res.send({ -// message: 'Sucesso' -// }) -// } catch (error) { -// console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error) -// return res.status(500).json({ message: 'Something went wrong with server', error }) -// } -// } } export default CachacaController \ No newline at end of file diff --git a/src/controller/moradorController.ts b/src/controller/moradorController.ts index 32b020b..bf841c2 100644 --- a/src/controller/moradorController.ts +++ b/src/controller/moradorController.ts @@ -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) => { diff --git a/src/repository/cachacaRepository.ts b/src/repository/cachacaRepository.ts index 108ff8a..22d52c0 100644 --- a/src/repository/cachacaRepository.ts +++ b/src/repository/cachacaRepository.ts @@ -1,33 +1,30 @@ import { ObjectId } from 'mongodb' - -import Morador from '../models/morador' import Cachaca from '../models/cachaca' import getDatabase from '../util/database' const CachacaRepository = { - - async getAllMoradores(): Promise { - try { - const _database = await getDatabase() - - const moradores = (await _database + async verificarRegistroExistente(morador_id:(ObjectId | undefined), ano:number){ + try{ + const database = await getDatabase() + const verify = await database .collection('cachaca') - .find({ cachaca_para_tomar: { $exists: true } , }) // retira selina dos moradores - .sort({ cachaca_ja_tomada: -1 }) // ordenas pelos q tomaram mais cachaca - .toArray()) as Morador[] - - return moradores - } catch (error) { + .findOne({ + $and:[ + { _id: morador_id !== undefined ? morador_id : { $exists: true } }, + { ano_do_rank: ano }, + ] + }) as Cachaca + return verify + }catch(error){ throw new Error(`Something wrong with server, ${error}`) } - }, async addCachaca(morador_id: string): Promise { try { const _database = await getDatabase() // define uma nova cachaca para um morador - await _database.collection('moradores').updateOne( + await _database.collection('cachaca').updateOne( { _id: new ObjectId(morador_id), }, @@ -42,7 +39,7 @@ const CachacaRepository = { async updateCachaca(morador_id: string, cachaca_ja_tomada: number, cachaca_para_tomar?: number) { try { const _database = await getDatabase() - await _database.collection('moradores').updateOne( + await _database.collection('cachaca').updateOne( { _id: new ObjectId(morador_id) }, { $inc: cachaca_para_tomar ? { cachaca_para_tomar: cachaca_para_tomar, @@ -56,84 +53,17 @@ const CachacaRepository = { } }, - async getOneMorador(morador_id: string): Promise { - try { - const _database = await getDatabase() - const [morador] = (await _database - .collection('moradores') - .find({ _id: new ObjectId(morador_id) }) - .toArray()) as Morador[] - return morador - } catch (error) { - throw new Error(`Something wrong with server, ${error}`) - } - }, - - async getMorador(name: string) { + async addMoradorAoRankCachaca(morador: Omit) { try { const _database = await getDatabase() - return await _database - .collection('moradores') - .findOne({ apelido: name }) as Morador - } catch (error) { - throw new Error(`Something wrong with server, ${error}`) - } - - }, - // async getMoradoresOficiais() { - // try { - // const _database = await getDatabase() - // return await _database - // .collection('moradores') - // .find({ oficial: true }) - // .toArray() as Morador[] - // } catch (error) { - // throw new Error(`Something wrong with server, ${error}`) - // } - // }, - async createRankMoradores(morador: Morador, ano_de_inicio:number ) { - try { - const _database = await getDatabase() - - console.log(_database) - const moradores = await _database - .collection('moradores') - .find({ oficial: { $exists: true } }) - .toArray() as Morador[] - - const moradoresRanks: Morador[] = moradores.map((morador) => ({ - _id: morador._id, - apelido: morador.apelido, - imagem: morador.imagem, - instagram: morador.instagram, - ano_de_inicio, - cachaca_para_tomar: 0, - cachaca_ja_tomada: 0, - })) return await _database .collection('cachaca') - .insertMany(moradoresRanks) + .insertOne(morador) } catch (error) { throw new Error(`Something wrong with server, ${error}`) } - }, - - - - - - async changePassword(name: string, new_password: string) { - try { - const _database = await getDatabase() - await _database.collection('moradores') - .updateOne({ apelido: name }, { $set: { senha: new_password } }) - } catch (error) { - throw new Error(`Something wrong with server, ${error}`) - } - - }, } -export default MoradoresRepository +export default CachacaRepository diff --git a/src/repository/moradorRepository.ts b/src/repository/moradorRepository.ts index 60ee48e..f2220ec 100644 --- a/src/repository/moradorRepository.ts +++ b/src/repository/moradorRepository.ts @@ -18,7 +18,7 @@ const MoradoresRepository = { ] }) .sort({ cachaca_ja_tomada: -1 }) - .toArray()) as Morador[]; + .toArray()) as Morador[] return moradores } catch (error) { @@ -27,41 +27,6 @@ const MoradoresRepository = { }, - async addCachaca(morador_id: string): Promise { - 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 { try { const _database = await getDatabase() @@ -96,7 +61,6 @@ const MoradoresRepository = { } catch (error) { throw new Error(`Something wrong with server, ${error}`) } - }, async changePassword(name: string, new_password: string) { @@ -134,7 +98,29 @@ const MoradoresRepository = { } catch (error) { throw new Error(`Something wrong with database, ${error}`) } - } + }, + + async getAllMoradores_oficiais(id?: ObjectId): Promise { + try { + const _database = await getDatabase() + + const moradores_oficiais = (await _database + .collection('morador') + .find({ + $and:[ + { oficial: true }, // retira moradores que não estao na casa oficialmente + { _id: id !== undefined ? id : { $exists: true } } + ] + }) + .toArray()) as Morador[] + + return moradores_oficiais + } catch (error) { + throw new Error(`Something wrong with server, ${error}`) + } + + }, + } export default MoradoresRepository diff --git a/src/service/cachacaService.ts b/src/service/cachacaService.ts index f7968a8..3bcf18b 100644 --- a/src/service/cachacaService.ts +++ b/src/service/cachacaService.ts @@ -1,42 +1,50 @@ import CachacaRepository from '../repository/cachacaRepository' -import returnHashString from '../util/crypto' +import MoradoresRepository from '../repository/moradorRepository' +import Cachaca from '../models/cachaca' + const cachacaService = { - async show() { + + async addMoradorAoRank(ano: number) { try { - const moradores = await CachacaRepository.getAllMoradores() - return moradores - } catch (error) { - throw new Error('Erro no servidor') - } - - }, + const morador = await MoradoresRepository.getAllMoradores_oficiais() - async showOne(name: string) { - try { - const moradores = await CachacaRepository.getMorador(name) - - return moradores - } catch (error) { - throw new Error('Erro no servidor') - } - }, - - async changePassword(name: string, new_password: string) { - try { - const morador = await CachacaRepository.getMorador(name) - if (!morador) { throw new Error('User not found') } + for (const idMorador of morador) { + + // Verificar se já existe um registro para o morador no ano fornecido + const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano-1) + + if (!idMorador._id) throw new Error('There is no ID') + + if (!existente) { + + const toInsert = new Cachaca( + idMorador._id, + 0, + 0, + ano, + ) + await CachacaRepository.addMoradorAoRankCachaca(toInsert) + + } else { + const toInsert = new Cachaca( + idMorador._id, + existente.cachaca_para_tomar, + 0, + ano, + ) + await CachacaRepository.addMoradorAoRankCachaca(toInsert) + } + } - const new_password_hash = returnHashString(new_password) - - await CachacaRepository.changePassword(name, new_password_hash) } catch (error) { - throw new Error('Could not change password') + throw new Error('Could not create rank') } - } + }, + } diff --git a/src/service/moradorService.ts b/src/service/moradorService.ts index 605e4c1..0305727 100644 --- a/src/service/moradorService.ts +++ b/src/service/moradorService.ts @@ -51,8 +51,10 @@ const MoradoresService = { morador.curso, morador.imagem, morador.instagram, + true, 0, - 0, + false, + true, returnHashString('123456') ) @@ -70,9 +72,11 @@ const MoradoresService = { morador.curso, morador.imagem, morador.instagram, + morador.oficial, + morador.total_cachaca, + morador.formado, + morador.calouro, // coisas que nao podem ser atualizadas por aqui - oldMorador.cachaca_para_tomar, - oldMorador.cachaca_ja_tomada, oldMorador.senha, oldMorador._id, ) From ca892eb4e4e30eae96f7616eb8ea86c2301d9a6e Mon Sep 17 00:00:00 2001 From: LTaka Date: Tue, 19 Mar 2024 13:41:11 -0300 Subject: [PATCH 3/8] change controller cachca --- src/controller/cachacaController.ts | 10 ++++++---- src/routes/index.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index cd6bc45..ece4655 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -5,11 +5,13 @@ import cachacaService from '../service/cachacaService' const CachacaController = { async index(req: Request, res: Response) { try { - const response = await cachacaService.show() - + const ano = req.body + + const response = await cachacaService.addMoradorAoRank(ano) + return res.send({ - message: response ? 'Sucesso' : 'Erro', - moradores: response + message: 'Sucesso', + rank:response }) } catch (error) { console.error(`Error[SERVER](${new Date().toDateString()}): Server error!`, error) diff --git a/src/routes/index.ts b/src/routes/index.ts index a40ccff..bef04d5 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -45,8 +45,8 @@ route.post('/produtos/upload-file', upload('photo'), ProdutosController.uploadPr route.post('/webhooks', WebhookController.webhook) route.post('/cachaca',CachacaController.index) -route.get('/cachaca',CachacaController.index) -route.put('/cachaca',CachacaController.index) +// route.get('/cachaca',CachacaController.index) +// route.put('/cachaca',CachacaController.index) From ca4b5634ce2ac5c46e60a2b34d88dd8aaf3ac2e2 Mon Sep 17 00:00:00 2001 From: LTaka Date: Mon, 25 Mar 2024 14:38:01 -0300 Subject: [PATCH 4/8] change morador e cachaca --- src/controller/cachacaController.ts | 3 ++ src/repository/cachacaRepository.ts | 4 +- src/repository/moradorRepository.ts | 31 +++++++++++- src/service/cachacaService.ts | 73 ++++++++++++++++------------- 4 files changed, 75 insertions(+), 36 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index ece4655..0545a50 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -13,8 +13,11 @@ const CachacaController = { 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 }) } } diff --git a/src/repository/cachacaRepository.ts b/src/repository/cachacaRepository.ts index 22d52c0..d643fcc 100644 --- a/src/repository/cachacaRepository.ts +++ b/src/repository/cachacaRepository.ts @@ -20,7 +20,7 @@ const CachacaRepository = { } }, - async addCachaca(morador_id: string): Promise { + async addCachaca(morador_id: ObjectId): Promise { try { const _database = await getDatabase() // define uma nova cachaca para um morador @@ -36,7 +36,7 @@ const CachacaRepository = { }, - async updateCachaca(morador_id: string, cachaca_ja_tomada: number, cachaca_para_tomar?: number) { + async updateCachaca(morador_id: ObjectId, cachaca_ja_tomada: number, cachaca_para_tomar?: number) { try { const _database = await getDatabase() await _database.collection('cachaca').updateOne( diff --git a/src/repository/moradorRepository.ts b/src/repository/moradorRepository.ts index f2220ec..6440da9 100644 --- a/src/repository/moradorRepository.ts +++ b/src/repository/moradorRepository.ts @@ -120,7 +120,36 @@ const MoradoresRepository = { } }, - + async updateEvolvesVeteran(morador_id:ObjectId) { + try{ + const _database = await getDatabase() + await _database + .collection('moradores') + .updateOne({ _id: morador_id }, { 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 }, { 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 }, { formado: true}) + }catch(error){ + throw new Error(`Something wrong with server, ${error}`) + } + }, } export default MoradoresRepository diff --git a/src/service/cachacaService.ts b/src/service/cachacaService.ts index 3bcf18b..b338f41 100644 --- a/src/service/cachacaService.ts +++ b/src/service/cachacaService.ts @@ -1,50 +1,57 @@ import CachacaRepository from '../repository/cachacaRepository' import MoradoresRepository from '../repository/moradorRepository' import Cachaca from '../models/cachaca' +import { ObjectId } from 'mongodb' const cachacaService = { async addMoradorAoRank(ano: number) { - try { - const morador = await MoradoresRepository.getAllMoradores_oficiais() - if (!morador) { - throw new Error('User not found') - } - for (const idMorador of morador) { - - // Verificar se já existe um registro para o morador no ano fornecido - const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano-1) - - if (!idMorador._id) throw new Error('There is no ID') - - if (!existente) { - - const toInsert = new Cachaca( - idMorador._id, - 0, - 0, - ano, - ) - await CachacaRepository.addMoradorAoRankCachaca(toInsert) - - } else { - const toInsert = new Cachaca( - idMorador._id, - existente.cachaca_para_tomar, - 0, - ano, - ) - await CachacaRepository.addMoradorAoRankCachaca(toInsert) + const morador = await MoradoresRepository.getAllMoradores_oficiais() + + if (!morador) { + throw new Error('User not found') + } + for (const idMorador of morador) { + + // Verificar se já existe um registro para o morador no ano fornecido + const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano-1) + + if (!idMorador._id) throw new Error('There is no ID') + + if (!existente) { + + const toInsert = new Cachaca( + idMorador._id, + 0, + 0, + ano, + ) + await CachacaRepository.addMoradorAoRankCachaca(toInsert) + + } else { + const toInsert = new Cachaca( + idMorador._id, + existente.cachaca_para_tomar, + 0, + ano, + ) + //verifica se o calouro tomou todas as cachaca para se tornar veterano se nao so na proxima vez que criar + if(toInsert.cachaca_para_tomar == 0){ + await MoradoresRepository.updateEvolvesVeteran(toInsert._id) } + await CachacaRepository.addMoradorAoRankCachaca(toInsert) } - - } catch (error) { - throw new Error('Could not create rank') } }, + async addCachacaMorador(morador_id:ObjectId) { + await CachacaRepository.addCachaca(morador_id) + }, + async updateCachacaMorador(morador_id:ObjectId,cachaca_ja_tomada: number, cachaca_para_tomar?: number) { + await CachacaRepository.updateCachaca(morador_id,cachaca_ja_tomada,cachaca_para_tomar) + } } From ccd43f6254a4370620a7aa567479c5e7c6c89aee Mon Sep 17 00:00:00 2001 From: Vinicius Date: Tue, 26 Mar 2024 07:49:12 -0300 Subject: [PATCH 5/8] fix find all oficial moradodores --- src/repository/moradorRepository.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/repository/moradorRepository.ts b/src/repository/moradorRepository.ts index 6440da9..8278e3a 100644 --- a/src/repository/moradorRepository.ts +++ b/src/repository/moradorRepository.ts @@ -105,13 +105,8 @@ const MoradoresRepository = { const _database = await getDatabase() const moradores_oficiais = (await _database - .collection('morador') - .find({ - $and:[ - { oficial: true }, // retira moradores que não estao na casa oficialmente - { _id: id !== undefined ? id : { $exists: true } } - ] - }) + .collection('moradores') + .find({ oficial: 'true' }) .toArray()) as Morador[] return moradores_oficiais From 49f886b2c55e53c3557fdafcc3477398f4a5d8a5 Mon Sep 17 00:00:00 2001 From: Vinicius Date: Tue, 26 Mar 2024 08:17:01 -0300 Subject: [PATCH 6/8] feat add cachaca dto --- src/controller/cachacaController.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index 0545a50..64860c5 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -1,25 +1,32 @@ import { Request, Response } from 'express' +import { z } from 'zod' import cachacaService from '../service/cachacaService' -const CachacaController = { +const CachacaController = { async index(req: Request, res: Response) { try { - const ano = req.body + const body: ChachacaDTO = AnoSchema.parse(req.body) - const response = await cachacaService.addMoradorAoRank(ano) + const response = await cachacaService.addMoradorAoRank(body.ano) return res.send({ message: 'Sucesso', - rank:response + 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 }) } } } -export default CachacaController \ No newline at end of file + +const AnoSchema = z.object({ + ano: z.number().min(2015) +}) +type ChachacaDTO = z.infer + +export default CachacaController From 298dccb06205ec990b63283c440dcc5fd1377b7a Mon Sep 17 00:00:00 2001 From: LTaka Date: Tue, 26 Mar 2024 09:24:57 -0300 Subject: [PATCH 7/8] arrumando --- src/controller/cachacaController.ts | 6 +++--- src/repository/cachacaRepository.ts | 2 +- src/repository/moradorRepository.ts | 17 +++++------------ src/service/cachacaService.ts | 8 ++++---- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index 0545a50..831c7ae 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -5,9 +5,9 @@ import cachacaService from '../service/cachacaService' const CachacaController = { async index(req: Request, res: Response) { try { - const ano = req.body - - const response = await cachacaService.addMoradorAoRank(ano) + const {ano , ano_anterior }= req.body + + const response = await cachacaService.addMoradorAoRank(ano, ano_anterior) return res.send({ message: 'Sucesso', diff --git a/src/repository/cachacaRepository.ts b/src/repository/cachacaRepository.ts index d643fcc..f1ba3c8 100644 --- a/src/repository/cachacaRepository.ts +++ b/src/repository/cachacaRepository.ts @@ -10,7 +10,7 @@ const CachacaRepository = { .collection('cachaca') .findOne({ $and:[ - { _id: morador_id !== undefined ? morador_id : { $exists: true } }, + { _id: morador_id}, { ano_do_rank: ano }, ] }) as Cachaca diff --git a/src/repository/moradorRepository.ts b/src/repository/moradorRepository.ts index 6440da9..33dbb3c 100644 --- a/src/repository/moradorRepository.ts +++ b/src/repository/moradorRepository.ts @@ -8,7 +8,6 @@ const MoradoresRepository = { async getAllMoradores(id?: ObjectId): Promise { try { const _database = await getDatabase() - const moradores = (await _database .collection('moradores') .find({ @@ -100,19 +99,13 @@ const MoradoresRepository = { } }, - async getAllMoradores_oficiais(id?: ObjectId): Promise { + async getAllMoradores_oficiais(){ try { const _database = await getDatabase() - - const moradores_oficiais = (await _database - .collection('morador') - .find({ - $and:[ - { oficial: true }, // retira moradores que não estao na casa oficialmente - { _id: id !== undefined ? id : { $exists: true } } - ] - }) - .toArray()) as Morador[] + const moradores_oficiais = await _database + .collection('moradores') + .find({ 'oficial':'true'}) + .toArray() return moradores_oficiais } catch (error) { diff --git a/src/service/cachacaService.ts b/src/service/cachacaService.ts index b338f41..0c8ca19 100644 --- a/src/service/cachacaService.ts +++ b/src/service/cachacaService.ts @@ -6,7 +6,7 @@ import { ObjectId } from 'mongodb' const cachacaService = { - async addMoradorAoRank(ano: number) { + async addMoradorAoRank(ano: number, ano_anterior:number) { const morador = await MoradoresRepository.getAllMoradores_oficiais() @@ -14,10 +14,10 @@ const cachacaService = { throw new Error('User not found') } for (const idMorador of morador) { - // Verificar se já existe um registro para o morador no ano fornecido - const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano-1) - + + const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano_anterior) + console.log(existente) if (!idMorador._id) throw new Error('There is no ID') if (!existente) { From 4ce0839f0bafd627cca7a091eaf8ee85462d0ce0 Mon Sep 17 00:00:00 2001 From: LTaka Date: Tue, 26 Mar 2024 18:12:54 -0300 Subject: [PATCH 8/8] add, show e updatede criados em cachaca e moradores --- src/controller/cachacaController.ts | 59 ++++++++++++++++++++++++++++- src/models/cachaca.ts | 3 +- src/repository/cachacaRepository.ts | 18 ++++++++- src/repository/moradorRepository.ts | 8 ++-- src/routes/index.ts | 4 +- src/service/cachacaService.ts | 46 +++++++++++++++------- 6 files changed, 113 insertions(+), 25 deletions(-) diff --git a/src/controller/cachacaController.ts b/src/controller/cachacaController.ts index 64860c5..eed81a2 100644 --- a/src/controller/cachacaController.ts +++ b/src/controller/cachacaController.ts @@ -2,9 +2,10 @@ import { Request, Response } from 'express' import { z } from 'zod' import cachacaService from '../service/cachacaService' +import { ObjectId } from 'mongodb' const CachacaController = { - async index(req: Request, res: Response) { + async createRank(req: Request, res: Response) { try { const body: ChachacaDTO = AnoSchema.parse(req.body) @@ -21,9 +22,63 @@ const CachacaController = { 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({ ano: z.number().min(2015) }) diff --git a/src/models/cachaca.ts b/src/models/cachaca.ts index 04478c3..49d2c42 100644 --- a/src/models/cachaca.ts +++ b/src/models/cachaca.ts @@ -2,10 +2,11 @@ import { ObjectId } from 'mongodb' class Cachaca { constructor( - public _id: ObjectId, + public morador_id : ObjectId, public cachaca_para_tomar: number, public cachaca_ja_tomada: number, public ano_do_rank:number, + public _id?: ObjectId, ) {} } diff --git a/src/repository/cachacaRepository.ts b/src/repository/cachacaRepository.ts index f1ba3c8..591f4e3 100644 --- a/src/repository/cachacaRepository.ts +++ b/src/repository/cachacaRepository.ts @@ -3,14 +3,14 @@ import Cachaca from '../models/cachaca' import getDatabase from '../util/database' const CachacaRepository = { - async verificarRegistroExistente(morador_id:(ObjectId | undefined), ano:number){ + async verificaRegistroExistente(morador_id:(ObjectId | undefined), ano:number){ try{ const database = await getDatabase() const verify = await database .collection('cachaca') .findOne({ $and:[ - { _id: morador_id}, + { morador_id: morador_id}, { ano_do_rank: ano }, ] }) as Cachaca @@ -20,6 +20,20 @@ const CachacaRepository = { } }, + 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 { try { const _database = await getDatabase() diff --git a/src/repository/moradorRepository.ts b/src/repository/moradorRepository.ts index 92ad99f..b9db82c 100644 --- a/src/repository/moradorRepository.ts +++ b/src/repository/moradorRepository.ts @@ -105,7 +105,7 @@ const MoradoresRepository = { const moradores_oficiais = (await _database .collection('moradores') - .find({ oficial: 'true' }) + .find({ oficial: true}) .toArray()) as Morador[] return moradores_oficiais @@ -119,7 +119,7 @@ const MoradoresRepository = { const _database = await getDatabase() await _database .collection('moradores') - .updateOne({ _id: morador_id }, { calouro: false}) + .updateOne({ _id: morador_id }, { $set: {calouro: false}}) }catch(error){ throw new Error(`Something wrong with server, ${error}`) } @@ -129,7 +129,7 @@ const MoradoresRepository = { const _database = await getDatabase() await _database .collection('moradores') - .updateOne({ _id: morador_id }, { oficial: false}) + .updateOne({ _id: morador_id }, { $set: {oficial: false}}) }catch(error){ throw new Error(`Something wrong with server, ${error}`) } @@ -139,7 +139,7 @@ const MoradoresRepository = { const _database = await getDatabase() await _database .collection('moradores') - .updateOne({ _id: morador_id }, { formado: true}) + .updateOne({ _id: morador_id }, { $set: {formado: true}}) }catch(error){ throw new Error(`Something wrong with server, ${error}`) } diff --git a/src/routes/index.ts b/src/routes/index.ts index bef04d5..9a0f1c8 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -44,8 +44,8 @@ route.post('/produtos/upload-file', upload('photo'), ProdutosController.uploadPr route.post('/webhooks', WebhookController.webhook) -route.post('/cachaca',CachacaController.index) -// route.get('/cachaca',CachacaController.index) +route.post('/cachaca',CachacaController.createRank) +route.get('/cachaca',CachacaController.index) // route.put('/cachaca',CachacaController.index) diff --git a/src/service/cachacaService.ts b/src/service/cachacaService.ts index 0c8ca19..6fc041c 100644 --- a/src/service/cachacaService.ts +++ b/src/service/cachacaService.ts @@ -6,20 +6,20 @@ import { ObjectId } from 'mongodb' const cachacaService = { - async addMoradorAoRank(ano: number, ano_anterior:number) { - + async addMoradorAoRank(ano: number) { + const morador = await MoradoresRepository.getAllMoradores_oficiais() - if (!morador) { throw new Error('User not found') } + for (const idMorador of morador) { - // Verificar se já existe um registro para o morador no ano fornecido - - const existente = await CachacaRepository.verificarRegistroExistente( idMorador._id, ano_anterior) - console.log(existente) + if (!idMorador._id) throw new Error('There is no ID') - + + // Verificar se já existe um registro para o morador no ano fornecido + const existente = await CachacaRepository.verificaRegistroExistente( idMorador._id, ano -1) + if (!existente) { const toInsert = new Cachaca( @@ -31,27 +31,45 @@ const cachacaService = { await CachacaRepository.addMoradorAoRankCachaca(toInsert) } else { + const toInsert = new Cachaca( idMorador._id, existente.cachaca_para_tomar, 0, - ano, + ano ) - //verifica se o calouro tomou todas as cachaca para se tornar veterano se nao so na proxima vez que criar - if(toInsert.cachaca_para_tomar == 0){ - await MoradoresRepository.updateEvolvesVeteran(toInsert._id) - } await CachacaRepository.addMoradorAoRankCachaca(toInsert) } } }, + async verifyVeterano(ano: number){ + const morador = await MoradoresRepository.getAllMoradores_oficiais() + if (!morador) { + throw new Error('User not found') + } + // Verificar se já existe um registro para o morador no ano fornecido + for (const idMorador of morador) { + const existente = await CachacaRepository.verificaRegistroExistente( idMorador._id, ano -1) + if(existente){ + await MoradoresRepository.updateEvolvesVeteran(existente.morador_id) + } + } + }, + async addCachacaMorador(morador_id:ObjectId) { await CachacaRepository.addCachaca(morador_id) + }, async updateCachacaMorador(morador_id:ObjectId,cachaca_ja_tomada: number, cachaca_para_tomar?: number) { await CachacaRepository.updateCachaca(morador_id,cachaca_ja_tomada,cachaca_para_tomar) - } + }, + async showRank(ano: number) { + const rank = await CachacaRepository.showRankMoradores(ano) + return rank + }, + + }