Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Laura García Calderón
/
DAELaura2526
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
3
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
d554e340
authored
Oct 20, 2025
by
Laura García Calderón
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Practica 1 correccion REST
parent
0f8213ee
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
13 additions
and
158 deletions
src/main/java/com/ayto/incidencias/App.java
src/main/java/com/ayto/incidencias/repo/memoria/IncidenciaRepoMem.java
src/main/java/com/ayto/incidencias/servicio/ServicioIncidencias.java
src/main/java/com/ayto/incidencias/web/AuthInterceptor.java
src/main/java/com/ayto/incidencias/web/IncidenciaController.java
src/main/java/com/ayto/incidencias/web/TipoIncidenciaController.java
src/main/java/com/ayto/incidencias/web/UsuarioController.java
src/main/java/com/ayto/incidencias/App.java
View file @
d554e340
package
com
.
ayto
.
incidencias
;
import
com.ayto.incidencias.web.AuthInterceptor
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
@SpringBootApplication
public
class
App
implements
WebMvcConfigurer
{
private
final
AuthInterceptor
auth
;
public
App
(
AuthInterceptor
auth
){
this
.
auth
=
auth
;
}
public
class
App
{
public
static
void
main
(
String
[]
args
){
SpringApplication
.
run
(
App
.
class
,
args
);
}
public
static
void
main
(
String
[]
args
){
SpringApplication
.
run
(
App
.
class
,
args
);
@Override
public
void
addInterceptors
(
InterceptorRegistry
reg
){
reg
.
addInterceptor
(
auth
).
addPathPatterns
(
"/api/**"
);
}
}
\ No newline at end of file
src/main/java/com/ayto/incidencias/repo/memoria/IncidenciaRepoMem.java
View file @
d554e340
...
...
@@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.stream.Collectors
;
@Repository
public
class
IncidenciaRepoMem
implements
IncidenciaRepo
{
...
...
@@ -23,7 +24,7 @@ public class IncidenciaRepoMem implements IncidenciaRepo {
public
List
<
Incidencia
>
findByAutor
(
Long
uid
){
return
datos
.
values
().
stream
()
.
filter
(
i
->
i
.
getAutor
()!=
null
&&
i
.
getAutor
().
getId
().
equals
(
uid
))
.
toList
(
);
.
collect
(
Collectors
.
toList
()
);
}
public
List
<
Incidencia
>
findAll
(){
return
new
ArrayList
<>(
datos
.
values
());
}
}
\ No newline at end of file
src/main/java/com/ayto/incidencias/servicio/ServicioIncidencias.java
View file @
d554e340
...
...
@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Service
public
class
ServicioIncidencias
{
...
...
@@ -32,18 +33,18 @@ public class ServicioIncidencias {
return
incidencias
.
findAll
().
stream
()
.
filter
(
i
->
tipoId
==
null
||
(
i
.
getTipo
()!=
null
&&
i
.
getTipo
().
getId
().
equals
(
tipoId
)))
.
filter
(
i
->
estado
==
null
||
i
.
getEstado
()==
estado
)
.
toList
(
);
.
collect
(
Collectors
.
toList
()
);
}
public
void
borrarSiPendiente
(
Long
autorId
,
Long
incId
){
TipoIncidencia
inc
=
incidencias
.
findById
(
incId
).
orElseThrow
().
getTipo
();
Incidencia
inc
=
incidencias
.
findById
(
incId
).
orElseThrow
();
if
(!
inc
.
getAutor
().
getId
().
equals
(
autorId
))
throw
new
SecurityException
(
"No puedes borrar de otros"
);
if
(
inc
.
getEstado
()!=
EstadoIncidencia
.
PENDIENTE
)
throw
new
IllegalStateException
(
"Sólo PENDIENTE"
);
incidencias
.
delete
(
incId
);
}
public
Incidencia
adminCambiarEstado
(
Long
id
,
EstadoIncidencia
nuevo
){
TipoIncidencia
inc
=
incidencias
.
findById
(
id
).
orElseThrow
().
getTipo
();
Incidencia
inc
=
incidencias
.
findById
(
id
).
orElseThrow
();
inc
.
setEstado
(
nuevo
);
return
incidencias
.
save
(
inc
);
}
...
...
src/main/java/com/ayto/incidencias/web/AuthInterceptor.java
deleted
100644 → 0
View file @
0f8213ee
package
com
.
ayto
.
incidencias
.
web
;
import
com.ayto.incidencias.dominio.Usuario
;
import
com.ayto.incidencias.servicio.ServicioUsuarios
;
import
jakarta.servlet.http.*
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.servlet.HandlerInterceptor
;
@Component
public
class
AuthInterceptor
implements
HandlerInterceptor
{
public
static
final
String
ATTR_USER
=
"AUTH_USER"
;
private
final
ServicioUsuarios
usuarios
;
public
AuthInterceptor
(
ServicioUsuarios
usuarios
){
this
.
usuarios
=
usuarios
;
}
@Override
public
boolean
preHandle
(
HttpServletRequest
req
,
HttpServletResponse
res
,
Object
handler
){
// Permite registrar sin credenciales
if
(
req
.
getMethod
().
equals
(
"POST"
)
&&
req
.
getRequestURI
().
equals
(
"/api/usuarios/registro"
))
return
true
;
String
login
=
req
.
getHeader
(
"X-Login"
);
String
pass
=
req
.
getHeader
(
"X-Password"
);
try
{
Usuario
u
=
usuarios
.
autenticar
(
login
,
pass
);
req
.
setAttribute
(
ATTR_USER
,
u
);
return
true
;
}
catch
(
Exception
e
){
res
.
setStatus
(
401
);
return
false
;
}
}
}
\ No newline at end of file
src/main/java/com/ayto/incidencias/web/IncidenciaController.java
deleted
100644 → 0
View file @
0f8213ee
package
com
.
ayto
.
incidencias
.
web
;
import
com.ayto.incidencias.dominio.*
;
import
com.ayto.incidencias.servicio.ServicioIncidencias
;
import
jakarta.servlet.http.HttpServletRequest
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/api/incidencias"
)
public
class
IncidenciaController
{
private
final
ServicioIncidencias
svc
;
public
IncidenciaController
(
ServicioIncidencias
svc
){
this
.
svc
=
svc
;
}
@PostMapping
public
Incidencia
crear
(
HttpServletRequest
req
,
@RequestParam
Long
tipoId
,
@RequestParam
String
descripcion
,
@RequestParam
String
calle
,
@RequestParam
String
numero
,
@RequestParam
String
ciudad
,
@RequestParam
String
provincia
,
@RequestParam
String
cp
,
@RequestParam
(
required
=
false
)
Double
lat
,
@RequestParam
(
required
=
false
)
Double
lon
){
var
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
var
dir
=
new
Direccion
();
dir
.
setCalle
(
calle
);
dir
.
setNumero
(
numero
);
dir
.
setCiudad
(
ciudad
);
dir
.
setProvincia
(
provincia
);
dir
.
setCp
(
cp
);
CoordenadaGPS
gps
=
(
lat
!=
null
&&
lon
!=
null
)
?
new
CoordenadaGPS
()
:
null
;
if
(
gps
!=
null
){
gps
.
setLatitud
(
lat
);
gps
.
setLongitud
(
lon
);
}
return
svc
.
crearIncidencia
(
u
,
tipoId
,
descripcion
,
dir
,
gps
);
}
@GetMapping
(
"/mias"
)
public
List
<
Incidencia
>
mias
(
HttpServletRequest
req
){
var
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
return
svc
.
listarMisIncidencias
(
u
.
getId
());
}
@GetMapping
public
List
<
Incidencia
>
buscar
(
@RequestParam
(
required
=
false
)
Long
tipoId
,
@RequestParam
(
required
=
false
)
EstadoIncidencia
estado
){
return
svc
.
buscar
(
tipoId
,
estado
);
}
@DeleteMapping
(
"/{id}"
)
public
void
borrarPropia
(
HttpServletRequest
req
,
@PathVariable
Long
id
){
Usuario
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
svc
.
borrarSiPendiente
(
u
.
getId
(),
id
);
}
@PatchMapping
(
"/{id}/estado"
)
public
Incidencia
cambiarEstado
(
HttpServletRequest
req
,
@PathVariable
Long
id
,
@RequestParam
EstadoIncidencia
estado
){
Usuario
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
if
(
u
.
getRol
()!=
RolUsuario
.
ADMIN
)
throw
new
SecurityException
(
"Sólo admin"
);
return
svc
.
adminCambiarEstado
(
id
,
estado
);
}
@DeleteMapping
(
"/{id}/admin"
)
public
void
borrarAdmin
(
HttpServletRequest
req
,
@PathVariable
Long
id
){
Usuario
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
if
(
u
.
getRol
()!=
RolUsuario
.
ADMIN
)
throw
new
SecurityException
(
"Sólo admin"
);
svc
.
adminBorrar
(
id
);
}
}
\ No newline at end of file
src/main/java/com/ayto/incidencias/web/TipoIncidenciaController.java
deleted
100644 → 0
View file @
0f8213ee
package
com
.
ayto
.
incidencias
.
web
;
import
com.ayto.incidencias.dominio.*
;
import
com.ayto.incidencias.servicio.ServicioTiposIncidencia
;
import
jakarta.servlet.http.HttpServletRequest
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/api/tipos"
)
public
class
TipoIncidenciaController
{
private
final
ServicioTiposIncidencia
tipos
;
public
TipoIncidenciaController
(
ServicioTiposIncidencia
tipos
){
this
.
tipos
=
tipos
;
}
@GetMapping
public
List
<
TipoIncidencia
>
listar
(){
return
tipos
.
listar
();
}
@PostMapping
public
TipoIncidencia
crear
(
HttpServletRequest
req
,
@RequestParam
String
nombre
,
@RequestParam
String
descripcion
){
Usuario
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
if
(
u
.
getRol
()!=
RolUsuario
.
ADMIN
)
throw
new
SecurityException
(
"Sólo admin"
);
return
tipos
.
crear
(
nombre
,
descripcion
);
}
@DeleteMapping
(
"/{id}"
)
public
void
eliminar
(
HttpServletRequest
req
,
@PathVariable
Long
id
){
Usuario
u
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
if
(
u
.
getRol
()!=
RolUsuario
.
ADMIN
)
throw
new
SecurityException
(
"Sólo admin"
);
tipos
.
eliminar
(
id
);
}
}
\ No newline at end of file
src/main/java/com/ayto/incidencias/web/UsuarioController.java
deleted
100644 → 0
View file @
0f8213ee
package
com
.
ayto
.
incidencias
.
web
;
import
com.ayto.incidencias.dominio.Usuario
;
import
com.ayto.incidencias.servicio.ServicioUsuarios
;
import
jakarta.servlet.http.HttpServletRequest
;
import
org.springframework.web.bind.annotation.*
;
@RestController
@RequestMapping
(
"/api/usuarios"
)
public
class
UsuarioController
{
private
final
ServicioUsuarios
svc
;
public
UsuarioController
(
ServicioUsuarios
svc
){
this
.
svc
=
svc
;
}
@PostMapping
(
"/registro"
)
public
Usuario
registrar
(
@RequestBody
Usuario
u
){
return
svc
.
registrar
(
u
);
}
@PutMapping
(
"/me"
)
public
Usuario
actualizar
(
HttpServletRequest
req
,
@RequestBody
Usuario
u
){
Usuario
actual
=
(
Usuario
)
req
.
getAttribute
(
AuthInterceptor
.
ATTR_USER
);
u
.
setId
(
actual
.
getId
());
u
.
setLogin
(
actual
.
getLogin
());
u
.
setRol
(
actual
.
getRol
());
return
svc
.
actualizar
(
u
);
}
}
\ No newline at end of file
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