diff --git a/semana18/Spotenu/src/business/MusicBusiness.ts b/semana18/Spotenu/src/business/MusicBusiness.ts index fdeab5de..63d1ca30 100644 --- a/semana18/Spotenu/src/business/MusicBusiness.ts +++ b/semana18/Spotenu/src/business/MusicBusiness.ts @@ -5,10 +5,16 @@ export class MusicBusiness { public async bandList() { return new MusicDatabase().bandList } - public async bandApprove(id: string) { - return new MusicDatabase().bandApprove(id) + public async bandApprove(emailOrNickname: string) { + return new MusicDatabase().bandApprove(emailOrNickname) } - public async bandSearchById(id: string) { - return new MusicDatabase().bandSearchById(id) + public async bandSearchByEmailOrNickname(emailOrNickname: string) { + return new MusicDatabase().bandSearchByEmailOrNickname(emailOrNickname) + } + public async addNewGenre(newGenreName: string, genreId: string) { + return new MusicDatabase().addNewGenre(newGenreName, genreId) + } + public async getAllGenres() { + return new MusicDatabase().getAllGenres() } } \ No newline at end of file diff --git a/semana18/Spotenu/src/business/UserBusiness.ts b/semana18/Spotenu/src/business/UserBusiness.ts index 3efdc2ba..7783a3cf 100644 --- a/semana18/Spotenu/src/business/UserBusiness.ts +++ b/semana18/Spotenu/src/business/UserBusiness.ts @@ -23,7 +23,7 @@ export class UserBusiness { public async login(email: string, password: string) { - const musicDatabase = await new MusicDatabase().bandSearchByEmail(email) + const musicDatabase = await new MusicDatabase().bandSearchByEmailOrNickname(email) const musicDatabaseRow = musicDatabase[0][0] console.log('musicDatabase[0][0] on Userbusiness ', musicDatabaseRow) @@ -31,7 +31,7 @@ export class UserBusiness { if (!musicDatabaseRow) { throw new Error("Cadastro não identificado") } - const databasePassword = await new MusicDatabase().bandSearchByEmail(email) + const databasePassword = await new MusicDatabase().bandSearchByEmailOrNickname(email) if (!musicDatabaseRow) { throw new Error("Email ou password inválidos") diff --git a/semana18/Spotenu/src/controller/MusicController.ts b/semana18/Spotenu/src/controller/MusicController.ts index 631267f2..07ed7a2d 100644 --- a/semana18/Spotenu/src/controller/MusicController.ts +++ b/semana18/Spotenu/src/controller/MusicController.ts @@ -4,6 +4,7 @@ import { MusicDatabase } from "../data/MusicDatabase"; import { UserBusiness } from "../business/UserBusiness"; import { BaseDataBase } from "../data/BaseDatabase"; import { MusicBusiness } from "../business/MusicBusiness"; +import { IdGenerator } from "../services/IdGenerator"; export class MusicController { @@ -39,17 +40,17 @@ export class MusicController { throw new Error("Somente um perfil administrador pode aprovar uma banda.") } - const id = req.body.id - if (!req.body.id) { + const emailOrNickname = req.body.emailOrNickname + if (!req.body.emailOrNickname) { throw new Error("O campo da banda deve ser preenchido.") } - const bandSearchById = await new MusicDatabase().bandSearchById(id) + const bandSearchById = await new MusicDatabase().bandSearchByEmailOrNickname(emailOrNickname) if (!bandSearchById[0][0]) { - throw new Error("A id informada não existe.") + throw new Error("Usuário não encontrado.") } - const musicDatabase = await new MusicDatabase().bandApprove(id) + const musicDatabase = await new MusicBusiness().bandApprove(emailOrNickname) if (!musicDatabase[0].changedRows) { throw new Error("Esta banda ja foi aprovada!") } @@ -62,4 +63,38 @@ export class MusicController { await BaseDataBase.destroyConnection(); } } + + async addNewGenre(req: Request, res: Response) { + try { + const newGenreName = req.body.newGenreName + + if (!newGenreName) { + throw new Error("Favor preencher o campo Gênero.") + } + const genreId = new IdGenerator().generateId() + + await new MusicBusiness().addNewGenre(newGenreName, genreId) + + res.status(200).send(`Gênero '${newGenreName}' criado com sucesso!`) + + } catch (err) { + err.code === "ER_DUP_ENTRY" && res.status(400).send("Error. O gênero desejado ja existe.") + res.status(400).send(err.message) + } finally { + await BaseDataBase.destroyConnection(); + } + } + + async getAllGenres(req: Request, res: Response) { + try { + const allGenres = await new MusicBusiness().getAllGenres() + + res.status(200).send(allGenres[0]) + + } catch (err) { + res.status(400).send(err.message) + } finally { + await BaseDataBase.destroyConnection(); + } + } } \ No newline at end of file diff --git a/semana18/Spotenu/src/data/BaseDatabase.ts b/semana18/Spotenu/src/data/BaseDatabase.ts index df417953..5d27288a 100644 --- a/semana18/Spotenu/src/data/BaseDatabase.ts +++ b/semana18/Spotenu/src/data/BaseDatabase.ts @@ -8,6 +8,7 @@ export abstract class BaseDataBase { private static KNEX_CONNECTION: Knex | null = null; protected static USER_TABLE_NAME = "spotenu_users"; + protected static GENRE_TABLE_NAME = "spotenu_genre"; protected static REFRESHTOKEN_TABLE_NAME = "spotenu_refreshtoken"; diff --git a/semana18/Spotenu/src/data/MusicDatabase.ts b/semana18/Spotenu/src/data/MusicDatabase.ts index 0783250c..bab65788 100644 --- a/semana18/Spotenu/src/data/MusicDatabase.ts +++ b/semana18/Spotenu/src/data/MusicDatabase.ts @@ -9,19 +9,32 @@ export class MusicDatabase extends BaseDataBase { OR band_approval = 1; `) } - public async bandApprove(id: string) { + public async bandApprove(emailOrNickname: string) { return await super.getConnection().raw(` UPDATE sagan_vitor_db.${BaseDataBase.USER_TABLE_NAME} SET band_approval = '1' - WHERE id = '${id}' - && band_approval = '0'; + WHERE name = '${emailOrNickname}' + OR nickname = '${emailOrNickname}' + AND band_approval = '0'; `) } - public async bandSearchByEmail(email: string) { + public async bandSearchByEmailOrNickname(emailOrNickname: string) { return await super.getConnection().raw(` SELECT * FROM ${BaseDataBase.USER_TABLE_NAME} - WHERE email = '${email}' + WHERE email = '${emailOrNickname}' + OR nickname = '${emailOrNickname}'; + `) + } + public async addNewGenre(newGenreName: string, genreId: string) { + return await super.getConnection().raw(` + INSERT INTO ${BaseDataBase.GENRE_TABLE_NAME} + (genre_id, genre_name) VALUES ('${genreId}', '${newGenreName}'); + `) + } + public async getAllGenres() { + return await super.getConnection().raw(` + SELECT * FROM ${BaseDataBase.GENRE_TABLE_NAME}; `) } } \ No newline at end of file diff --git a/semana18/Spotenu/src/routes/MusicRouter.ts b/semana18/Spotenu/src/routes/MusicRouter.ts index abbf49e4..190c7580 100644 --- a/semana18/Spotenu/src/routes/MusicRouter.ts +++ b/semana18/Spotenu/src/routes/MusicRouter.ts @@ -3,6 +3,9 @@ import { MusicController } from "../controller/MusicController"; export const musicRouter = express.Router(); -//SignUp +//Band musicRouter.get("/bandlist", new MusicController().bandList); musicRouter.put("/band/aprove", new MusicController().bandApprove); +//Music genre +musicRouter.put("/band/add-new-genre", new MusicController().addNewGenre); +musicRouter.get("/band/genres", new MusicController().getAllGenres);