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
1023e0e5
authored
May 11, 2025
by
Rubén Ramírez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat: [ServicioSeguimiento]: Implementadas las funciones para la red social
parent
2f613095
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
130 additions
and
0 deletions
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioSeguimiento.java
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioSeguimiento.java
0 → 100644
View file @
1023e0e5
package
com
.
ujaen
.
tfg
.
mangaffinity
.
servicios
;
import
com.ujaen.tfg.mangaffinity.entidades.Seguimiento
;
import
com.ujaen.tfg.mangaffinity.entidades.Usuario
;
import
com.ujaen.tfg.mangaffinity.excepciones.SeguimientoExiste
;
import
com.ujaen.tfg.mangaffinity.excepciones.SeguimientoNoExiste
;
import
com.ujaen.tfg.mangaffinity.excepciones.UsuarioNoExiste
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioSeguimiento
;
import
com.ujaen.tfg.mangaffinity.repositorios.RepositorioUsuario
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @brief Servicio para gestionar seguimientos entre usuarios.
*/
@Service
public
class
ServicioSeguimiento
{
@Autowired
private
RepositorioSeguimiento
repositorioSeguimiento
;
@Autowired
private
RepositorioUsuario
repositorioUsuario
;
/**
* @param nombreSeguidor nombre de usuario que realiza el seguimiento.
* @param nombreSeguido nombre de usuario que será seguido.
* @throws UsuarioNoExiste si alguno de los dos usuarios no existe.
* @throws SeguimientoExiste si ya existe el seguimiento.
* @brief Permite a un usuario seguir a otro.
*/
@Transactional
public
void
seguir
(
String
nombreSeguidor
,
String
nombreSeguido
)
{
if
(
nombreSeguidor
.
equals
(
nombreSeguido
))
{
throw
new
IllegalArgumentException
(
"No puedes seguirte a ti mismo."
);
}
Usuario
seguidor
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguidor
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
Usuario
seguido
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguido
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
if
(
repositorioSeguimiento
.
existe
(
seguidor
,
seguido
))
{
throw
new
SeguimientoExiste
();
}
Seguimiento
seguimiento
=
new
Seguimiento
();
seguimiento
.
setSeguidor
(
seguidor
);
seguimiento
.
setSeguido
(
seguido
);
repositorioSeguimiento
.
guardar
(
seguimiento
);
}
/**
* @param nombreSeguidor nombre de usuario que dejará de seguir.
* @param nombreSeguido nombre del usuario seguido.
* @throws UsuarioNoExiste si alguno no existe.
* @throws SeguimientoNoExiste si la relación no existe.
* @brief Permite dejar de seguir a un usuario.
*/
@Transactional
public
void
dejarDeSeguir
(
String
nombreSeguidor
,
String
nombreSeguido
)
{
Usuario
seguidor
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguidor
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
Usuario
seguido
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguido
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
Seguimiento
seguimiento
=
repositorioSeguimiento
.
buscar
(
seguidor
,
seguido
)
.
orElseThrow
(
SeguimientoNoExiste:
:
new
);
repositorioSeguimiento
.
eliminar
(
seguimiento
);
}
/**
* @param nombreSeguidor nombre de usuario que realiza seguimientos.
* @return Lista de usuarios seguidos.
* @throws UsuarioNoExiste si el usuario no existe.
* @brief Obtiene los usuarios que sigue un usuario dado.
*/
@Transactional
(
readOnly
=
true
)
public
List
<
Usuario
>
obtenerSeguidos
(
String
nombreSeguidor
)
{
Usuario
seguidor
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguidor
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
return
repositorioSeguimiento
.
obtenerSeguidosDe
(
seguidor
).
stream
()
.
map
(
Seguimiento:
:
getSeguido
)
.
collect
(
Collectors
.
toList
());
}
/**
* @brief Obtiene los usuarios que siguen al usuario dado.
* @param nombreUsuario nombre del usuario al que otros siguen.
* @return Lista de usuarios que lo siguen.
* @throws UsuarioNoExiste si el usuario no existe.
*/
@Transactional
(
readOnly
=
true
)
public
List
<
Usuario
>
obtenerSeguidores
(
String
nombreUsuario
)
{
Usuario
seguido
=
repositorioUsuario
.
findByNombreUsuario
(
nombreUsuario
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
return
repositorioSeguimiento
.
obtenerSeguidoresDe
(
seguido
).
stream
()
.
map
(
Seguimiento:
:
getSeguidor
)
.
collect
(
Collectors
.
toList
());
}
/**
* @param nombreSeguidor quien realiza el seguimiento.
* @param nombreSeguido quien es seguido.
* @return true si lo sigue, false si no.
* @throws UsuarioNoExiste si no existe alguno de los usuarios.
* @brief Verifica si un usuario sigue a otro.
*/
@Transactional
(
readOnly
=
true
)
public
boolean
estaSiguiendo
(
String
nombreSeguidor
,
String
nombreSeguido
)
{
Usuario
seguidor
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguidor
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
Usuario
seguido
=
repositorioUsuario
.
findByNombreUsuario
(
nombreSeguido
)
.
orElseThrow
(
UsuarioNoExiste:
:
new
);
return
repositorioSeguimiento
.
existe
(
seguidor
,
seguido
);
}
}
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