Skip to content
Merged
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
20 changes: 5 additions & 15 deletions backend/src/controllers/like.controllers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fs from 'fs';
import path from 'path';
import { readDatabase, writeDatabase, findUser } from '../utils/databaseFunc.js';

export const seriesCurtidas = async (req, res) => {
try {
Expand Down Expand Up @@ -35,11 +36,7 @@ export const curtir = async(req, res) => {

const { userid } = req.params;
const { serie } = req.body;

const filePath = path.resolve('./src/database/users.json');

let data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
let user = data.find(element => element.user == userid);
const { user, data } = findUser(userid);

if (typeof user["Séries Curtidas"] === "string") {
user["Séries Curtidas"] = [user["Séries Curtidas"]];
Expand All @@ -56,7 +53,7 @@ export const curtir = async(req, res) => {

user["Séries Curtidas"].push(serie);

fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
writeDatabase(data);

res.status(200).json({ message: "Série curtida com sucesso!", user });
} catch (error) {
Expand All @@ -69,15 +66,9 @@ export const curtir = async(req, res) => {

export const descurtir = async(req,res) => {
try {
const filePath = path.resolve('./src/database/users.json');
const { userid } = req.params;
const { serie } = req.body;

// Ler o arquivo JSON
let data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));

// Encontrar o usuário
let user = data.find(element => element.user === userid);
const { user, data } = findUser(userid);

if (!user) {
console.log("Usuário não encontrado:", userid);
Expand All @@ -103,8 +94,7 @@ export const descurtir = async(req,res) => {
// // Remover a série do array
user["Séries Curtidas"] = user["Séries Curtidas"].filter(s => s !== serie);

// Escrever de volta no arquivo JSON
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
writeDatabase(data);

res.status(200).json({ message: "Série removida com sucesso!", user });
} catch (error) {
Expand Down
3 changes: 2 additions & 1 deletion backend/src/database/users.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
"user": "Ykaro",
"Séries Curtidas": [
"mad-max",
"black-panther"
"black-panther",
"howls-moving-castle"
],
"historicoDeVisualizacao": [
"O Incrível Hulk",
Expand Down
20 changes: 20 additions & 0 deletions backend/src/utils/databaseFunc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import fs from 'fs';
import path from 'path';

const filePath = path.resolve('./src/database/users.json');

export const readDatabase = () => {
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
};

export const writeDatabase = (data) => {
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
};

export const findUser = (userid) => {
const data = readDatabase();
return {
user: data.find(user => user.user === userid),
data
};
};
46 changes: 23 additions & 23 deletions features/like.feature
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,35 @@ Feature: Curtir
So that i can receber recomendações semelhantes à aquele conteúdo

Scenario: Clicar no botão de curtida
Given A lista Séries Curtidas está vazia
And O usuário Ykaro está na tela de visualização da série The Boys
When O usuário Ykaro clica no botão curtir
And O usuário Ykaro acessa a lista “séries curtidas
Then The boys está na lista “séries curtidas
Given A lista "Séries Curtidas" está vazia
And O usuário "Ykaro" está na tela de visualização da série "The Boys"
When O usuário "Ykaro" clica no botão "curtir"
And O usuário "Ykaro" acessa a lista "Séries curtidas"
Then "The boys" está na lista "Séries curtidas"

Scenario: Clicar novamente no botão de curtida
Given A série The Boys está na lista “séries curtidas
And O usuário Ykaro está na tela de visualização da série The Boys
When O usuário Ykaro clica no botão curtir
And O usuário Ykaro acessa a lista “séries curtidas
Then A lista “séries curtidas está vazia
Given A série "The Boys" está na lista "Séries curtidas"
And O usuário "Ykaro" está na tela de visualização da série "The Boys"
When O usuário "Ykaro" clica no botão "curtir"
And O usuário "Ykaro" acessa a lista "Séries curtidas"
Then A lista "Séries curtidas" está vazia

Scenario: Obter a lista de séries curtidas pelo usuário
Given O usuário "Ykaro" está logado no sistema
When Uma requisição GET é enviada para “/usuario/seriesCurtidas
Then O status da resposta deve ser 200
And O JSON da resposta contém a lista “séries curtidas
And A lista contém o item Breaking Bad
When Uma requisição "GET" é enviada para "/user/seriesCurtidas/Ykaro"
Then O status da resposta deve ser "200"
And O JSON da resposta contém a lista "Séries curtidas"
And A lista contém o item "Breaking Bad"

Scenario: Adicionar item a lista de “Séries Curtidas”
Given A lista ‘séries curtidas do usuário Ykaro contém o item Breaking Bad”
And O usuário curtiu a série The Boys
When Uma requisição PUT é enviada para “/usuario/seriesCurtidas/theBoys” com o item The Boys
Then O status da resposta deve ser 200
And A lista “séries curtidas contém os itens Breaking Bad e The Boys
Given A lista "Séries curtidas" do usuário "Ykaro" contém o item "Breaking "
And O usuário curtiu a série "The Boys"
When Uma requisição "PUT" é enviada para "/user/curtir/Ykar"” com o item "The Boys"
Then O status da resposta deve ser "200"
And A lista "Séries curtidas" contém os itens "Breaking Bad" e "The Boys"

Scenario: Remover item da lista de “Séries Curtidas”
Given A lista Séries curtidas do usuário Ykaro contém os itens Breaking Bad e The Boys
When Uma requisição PUT é enviada para “/usuario/seriesCurtidas/theBoys” com o item The Boys
Then O status da resposta deve ser 200
And A lista “séries curtidas” do usuário Ykaro contém o item Breaking Bad
Given A lista "Séries curtidas" do usuário "Ykaro" contém os itens "Breaking Bad" e "The Boys"
When Uma requisição "PUT" é enviada para "/user/descurtir/Ykaro" com o item "The Boys"
Then O status da resposta deve ser "200"
And A lista “séries curtidas” do usuário "Ykaro" contém o item "Breaking Bad"
14 changes: 7 additions & 7 deletions features/recomendation_like.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ Feature: Recomendações com base nas curtidas (Top 10) - Ykaro dos Santos Albuq
I want to receber recomendções
So that i can receber conteúdo de qualidade

Scenario: Visualização da lista Em alta
Given O usuário Ykaro está na Página Inicial
When O usuário Ykaro acessa a lista Em Alta
Then Estão presentes na lista “The Boys”, “Breaking Bad”, “The Last of Us”, “Marley e Eu”, “Vingadores: Guerra Infinita”, “The Walking Dead”, “The Batman”, “Ainda estou aqui”, “La La Land”, “Valente”
Scenario: Visualização da lista "Em alta"
Given O usuário "Ykaro" está na "Página Inicial"
When O usuário "Ykaro" acessa a lista "Em Alta"
Then Estão presentes na lista "howls-moving-castle", "the-hangover", "superbad", "la-la-land", "the-notebook", "a-quiet-place", "it", "jumanji", "mad-max", "alien"

Scenario: Exibindo recomendações com base nas curtidas
Given O usuário "Ykaro" está logado no sistema
When Uma requisição GET é enviada para /user/top10/Sistema
Then O status da resposta deve ser 200
And O JSON da resposta contém a lista Top 10 com os itens “The Boys”, “Breaking Bad”, “The Last of Us”, “Marley e Eu”, “Vingadores: Guerra Infinita”, “The Walking Dead”, “The Batman”, “Ainda estou aqui”, “La La Land”, “Valente”
When Uma requisição "GET" é enviada para "/user/top10/Sistema"
Then O status da resposta deve ser "200"
And O JSON da resposta contém a lista "Top 10" com os itens "howls-moving-castle", "the-hangover", "superbad", "la-la-land", "the-notebook", "a-quiet-place", "it", "jumanji", "mad-max", "alien"
40 changes: 19 additions & 21 deletions features/recomendation_views.feature
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,32 @@ Feature: Recomendação com base nas visualizações do usuário
So that i can aproveitar as recomendações da plataforma

Scenario: Exibir recomendações para um usuário com histórico de visualizações (GUI)
Given O usuário Ykaro assistiu aos filmes Capitão América”, “Homem de Ferro e Anabelle
When O usuário Ykaro acessa a Página Inicial
Then Está presente uma lista de título “For You” em que Homem Aranha, de volta ao lar”, “The Batman”, “The boys e Deadpool 2 aparecem disponíveis
And Está presente outra lista de título “For You” em que Anabelle 3”, “A Freira”, “Sorriso e A substância aparecem disponíveis
Given O usuário "Ykaro" assistiu aos filmes "Capitão América", "Homem de Ferro" e "Anabelle"
When O usuário "Ykaro" acessa a "Página Inicial"
Then Está presente uma lista de título "Recomendações" em que "Homem Aranha, de volta ao lar", "The Batman", "The boys" e "Deadpool 2" aparecem disponíveis
And Está presente outra lista de título "Recomendações" em que "Anabelle 3", "A Freira", "Sorriso" e "A substância" aparecem disponíveis

Scenario: Exibir recomendações para um usuário sem histórico de visualizações (GUI)
Given O usuário “Ykaro” não assistiu a nenhum filme na plataforma
When O usuário “Ykaro” acessa a “página inicial”
Then É exibida a mensagem “Seja bem-vindo à plataforma, atualmente as suas recomendações estão usando métricas gerais dos nossos usuários. Elas vão ficar cada vez mais a sua cara com o passar do tempo :)”
And Está presente uma lista de título “For You” em que “Moana 2”, “Zootopia”, “The Soul”, “Valente” e “Enrolados” aparecem disponíveis
And Está presente outra lista de título “For You” em que “Robin-Hood - A origem”, “Uncharted - Fora do mapa”, “Os caçadores da arca perdida” e “Dungeons & Dragons - Honra entre rebeldes” aparecem disponíveis
Given O usuário "Ykaro" está logado no sistema
When O usuário "Ykaro" acessa a "página inicial"
Then Está presente uma lista de título "Recomendações" em que "black-panther", "alien", "mad-max", "jumanji" aparecem disponíveis

Scenario: Exibindo recomendações para o usuário com histórico de visualizações (gênero 1) (Service)
Given A lista historicoDeVisualizacao do usuário Ykaro contém os itens O incrível Hulk”, “Homem-Formiga
When Uma requisição GET é enviada para “/sistema/series/acao
Then O status da resposta deve ser 200
And O JSON da resposta contém os itens Homem Aranha, de volta ao lar”, “The Batman
Given A lista "historicoDeVisualizacao" do usuário "Ykaro" contém os itens "O incrível Hulk", "Homem-Formiga"
When Uma requisição "GET" é enviada para "/user/Sistema/series/acao"
Then O status da resposta deve ser "200"
And O JSON da resposta contém os itens "Homem Aranha, de volta ao lar", "The Batman"

Scenario: Exibindo recomendações para o usuário com histórico de visualizações (gênero 2) (Service)
Given A lista historicoDeVisualizacao do usuário Ykaro contém o item Invocação do mal
When Uma requisição GET é enviada para “/sistema/series/terror
Then O status da resposta deve ser 200
And O JSON da resposta contém os itens A Freira”, “Sorria
Given A lista "historicoDeVisualizacao" do usuário "Ykaro" contém o item "Invocação do mal"
When Uma requisição "GET" é enviada para "/user/Sistema/series/terror"
Then O status da resposta deve ser "200"
And O JSON da resposta contém os itens "A Freira", "Sorria"

Scenario: Exibindo recomendações para o usuário sem histórico de visualizações (Service)
Given A lista historicoDeVisualizacao do usuário está vazia
When Uma requisição GET é enviada para “/sistena/series/
Then O status da resposta deve ser 200
And O JSON da resposta contém os itens “Moana 2”, “Zootopia”
Given A lista "historicoDeVisualizacao" do usuário está vazia
When Uma requisição "GET" é enviada para "/user/Sistema/series/"
Then O status da resposta deve ser "200"
And O JSON da resposta contém os itens "black-panther", "alien", "mad-max", "jumanji"


3 changes: 2 additions & 1 deletion frontend/cinevideo/app/likedSeries/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ export default function LikedMoviesPage() {
const [likedMovies, setLikedMovies] = useState<any[]>([]) // IDs dos filmes curtidos
const [movieDetails, setMovieDetails] = useState<any[]>([]) // Detalhes dos filmes
const userId = "Ykaro"
const API_URL = "http://localhost:4000/user/seriesCurtidas";

useEffect(() => {
const fetchLikedMovies = async () => {
try {
const response = await fetch(`http://localhost:4000/user/seriesCurtidas/${userId}`);
const response = await fetch(`${API_URL}/${userId}`);
if (!response.ok) {
throw new Error("Erro ao buscar filmes curtidos");
}
Expand Down