Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Rubén Ramírez
/
MangAffinity
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
88e7362f
authored
Apr 20, 2025
by
Rubén Ramírez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat: [ServicioRecurso]: Añadidas una función obtener las recomendaciones
parent
888dec31
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
1 deletions
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioRecursos.java
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioRecursos.java
View file @
88e7362f
...
...
@@ -2,6 +2,7 @@ package com.ujaen.tfg.mangaffinity.servicios;
import
com.ujaen.tfg.mangaffinity.entidades.*
;
import
com.ujaen.tfg.mangaffinity.excepciones.*
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioBibliotecaPersonalRecurso
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioCapitulo
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioRecurso
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioUsuario
;
...
...
@@ -12,7 +13,8 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
java.time.LocalDate
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
@Service
public
class
ServicioRecursos
{
...
...
@@ -23,6 +25,10 @@ public class ServicioRecursos {
@Autowired
RepositorioCapitulo
repositorioCapitulo
;
@Autowired
private
RepositorioBibliotecaPersonalRecurso
repositorioBibliotecaPersonalRecurso
;
/**
* @brief Crea un nuevo recurso en el sistema.
* @param recurso Objeto Recurso con los datos a registrar.
...
...
@@ -408,4 +414,48 @@ public class ServicioRecursos {
.
sorted
(
Comparator
.
comparing
(
Resena:
:
getFechaPublicacion
).
reversed
())
.
collect
(
Collectors
.
toList
());
}
public
List
<
Recurso
>
obtenerRecomendacionesParaUsuario
(
Long
usuarioId
)
{
BibliotecaPersonal
biblioteca
=
repositorioBibliotecaPersonalRecurso
.
obtenerBibliotecaPorUsuarioId
(
usuarioId
)
.
orElseThrow
(
UsuarioSinBiblioteca:
:
new
);
List
<
Long
>
favoritosIds
=
biblioteca
.
getFavoritos
();
if
(
favoritosIds
.
isEmpty
())
return
Collections
.
emptyList
();
List
<
Recurso
>
recursosFavoritos
=
repositorioRecurso
.
findAllById
(
favoritosIds
);
// Extraer autores y géneros únicos de los favoritos
Set
<
String
>
autores
=
recursosFavoritos
.
stream
()
.
map
(
Recurso:
:
getAutor
)
.
filter
(
Objects:
:
nonNull
)
.
collect
(
Collectors
.
toSet
());
Set
<
Genero
>
generos
=
recursosFavoritos
.
stream
()
.
flatMap
(
r
->
r
.
getGeneros
().
stream
())
.
collect
(
Collectors
.
toSet
());
// Obtener recursos ya presentes en la biblioteca (cualquier categoría)
Set
<
Long
>
recursosEnBiblioteca
=
biblioteca
.
getRecursos
().
stream
()
.
map
(
bpr
->
bpr
.
getRecurso
().
getId
())
.
collect
(
Collectors
.
toSet
());
// Combinar favoritos + biblioteca en un solo conjunto de exclusión
Set
<
Long
>
idsAExcluir
=
new
HashSet
<>(
favoritosIds
);
idsAExcluir
.
addAll
(
recursosEnBiblioteca
);
// Buscar recursos recomendados que NO estén ni en favoritos ni en la biblioteca
List
<
Recurso
>
posibles
=
repositorioRecurso
.
findAll
().
stream
()
.
filter
(
r
->
!
idsAExcluir
.
contains
(
r
.
getId
()))
.
filter
(
r
->
autores
.
contains
(
r
.
getAutor
())
||
r
.
getGeneros
().
stream
().
anyMatch
(
generos:
:
contains
)
)
.
distinct
()
.
limit
(
4
)
.
collect
(
Collectors
.
toList
());
return
posibles
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment