Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
BackEnd-V2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Joel Andres Molina Velez
BackEnd-V2
Commits
2cc8e6c9
Commit
2cc8e6c9
authored
Jul 17, 2023
by
Joel Andres Molina Velez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Se agregan servicio a Usuario, para asignarle los perfiles y buscar los perfiles asignados
parent
25a0de59
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
98 additions
and
3 deletions
+98
-3
UzyTPerfilController.java
...ovilidad/MovilidadWS/Controller/UzyTPerfilController.java
+0
-2
UzyTUsuarioController.java
...vilidad/MovilidadWS/Controller/UzyTUsuarioController.java
+16
-0
DaoUzyTPerfil.java
.../ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTPerfil.java
+10
-0
DaoUzyTPerfilUsuario.java
.../espe/movilidad/MovilidadWS/Dao/DaoUzyTPerfilUsuario.java
+12
-0
DaoUzyTUsuario.java
...ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTUsuario.java
+4
-0
DtoUzyTPerfil.java
.../ec/edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTPerfil.java
+4
-0
DtoUzyTUsuario.java
...ec/edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTUsuario.java
+4
-0
UzyTPerfilMapper.java
...MovilidadWS/Mapper/Components_Class/UzyTPerfilMapper.java
+11
-0
IServiceUzyTUsuario.java
.../MovilidadWS/Service/UzyTUsuario/IServiceUzyTUsuario.java
+6
-0
ServiceUzyTUsuario.java
...d/MovilidadWS/Service/UzyTUsuario/ServiceUzyTUsuario.java
+31
-1
No files found.
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Controller/UzyTPerfilController.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTProvincia
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTPerfil.IServiceUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTPerfil.IServiceUzyTPerfil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Controller/UzyTUsuarioController.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario.IServiceUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario.IServiceUzyTUsuario
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
...
@@ -7,6 +8,7 @@ import org.springframework.http.ResponseEntity;
...
@@ -7,6 +8,7 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
static
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Constant
.
GlobalConstants
.
V1_API_VERSION
;
import
static
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Constant
.
GlobalConstants
.
V1_API_VERSION
;
...
@@ -19,8 +21,10 @@ public class UzyTUsuarioController {
...
@@ -19,8 +21,10 @@ public class UzyTUsuarioController {
private
final
IServiceUzyTUsuario
serviceUzyTUsuario
;
private
final
IServiceUzyTUsuario
serviceUzyTUsuario
;
public
UzyTUsuarioController
(
IServiceUzyTUsuario
serviceUzyTUsuario
)
{
public
UzyTUsuarioController
(
IServiceUzyTUsuario
serviceUzyTUsuario
)
{
this
.
serviceUzyTUsuario
=
serviceUzyTUsuario
;
this
.
serviceUzyTUsuario
=
serviceUzyTUsuario
;
}
}
@GetMapping
(
"/exampleFindId/{id}"
)
@GetMapping
(
"/exampleFindId/{id}"
)
...
@@ -33,6 +37,18 @@ public class UzyTUsuarioController {
...
@@ -33,6 +37,18 @@ public class UzyTUsuarioController {
return
new
ResponseEntity
<>(
serviceUzyTUsuario
.
ListarRegistros
(),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>(
serviceUzyTUsuario
.
ListarRegistros
(),
HttpStatus
.
OK
);
}
}
@GetMapping
(
"/perfilUsuario/{uzytusuario_id}"
)
public
ResponseEntity
<
Set
<
DtoUzyTPerfil
>>
findPerfilesByUsuarioId
(
@PathVariable
Long
uzytusuario_id
)
{
return
new
ResponseEntity
<>(
serviceUzyTUsuario
.
findPerfilesByUsuarioId
(
uzytusuario_id
),
HttpStatus
.
OK
);
}
@PostMapping
(
"/asignar_perfil/{uzytusuario_id}/{uzytperfil_id}"
)
public
void
asignarPerfilAUsuario
(
@PathVariable
(
"uzytusuario_id"
)
Long
uzytusuario_id
,
@PathVariable
(
"uzytperfil_id"
)
Long
uzytperfil_id
)
{
serviceUzyTUsuario
.
asignarPerfilAUsuario
(
uzytusuario_id
,
uzytperfil_id
);
}
@GetMapping
(
"/buscarUsuario"
)
@GetMapping
(
"/buscarUsuario"
)
public
ResponseEntity
<
List
<
DtoUzyTUsuario
>>
buscarUsuarios
(
@RequestParam
(
required
=
false
)
String
usuario
)
{
public
ResponseEntity
<
List
<
DtoUzyTUsuario
>>
buscarUsuarios
(
@RequestParam
(
required
=
false
)
String
usuario
)
{
List
<
DtoUzyTUsuario
>
usuarios
=
serviceUzyTUsuario
.
findByUsuario
(
usuario
);
List
<
DtoUzyTUsuario
>
usuarios
=
serviceUzyTUsuario
.
findByUsuario
(
usuario
);
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTPerfil.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Dao
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Dao
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.Set
;
@Repository
@Repository
public
interface
DaoUzyTPerfil
extends
JpaRepository
<
ModelUzyTPerfil
,
Long
>
{
public
interface
DaoUzyTPerfil
extends
JpaRepository
<
ModelUzyTPerfil
,
Long
>
{
//@Query("SELECT p.uzytusuarios FROM ModelUzyTPerfil p WHERE p.uzytusuario_id = :uzytperfilId")
//Set<ModelUzyTUsuario> findUsuariosByPerfilId(@Param("uzytperfilId") Long uzytperfilId);
}
}
\ No newline at end of file
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTPerfilUsuario.java
View file @
2cc8e6c9
...
@@ -3,8 +3,19 @@ package ec.edu.espe.movilidad.MovilidadWS.Dao;
...
@@ -3,8 +3,19 @@ package ec.edu.espe.movilidad.MovilidadWS.Dao;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfilUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfilUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfilUsuarioId
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfilUsuarioId
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.Set
;
@Repository
@Repository
public
interface
DaoUzyTPerfilUsuario
extends
JpaRepository
<
ModelUzyTPerfilUsuario
,
ModelUzyTPerfilUsuarioId
>
{
public
interface
DaoUzyTPerfilUsuario
extends
JpaRepository
<
ModelUzyTPerfilUsuario
,
ModelUzyTPerfilUsuarioId
>
{
// @Query("SELECT pu FROM ModelUzyTPerfilUsuario pu WHERE pu.uzytusuario.uzytusuario_id = :uzytperfilId")
// Set<ModelUzyTPerfilUsuario> findByPerfilId(@Param("uzytperfilId") Long uzytperfilId);
//@Query("SELECT pu FROM ModelUzyTPerfilUsuario pu WHERE pu.uzytusuario.uzytusuario_id = :uzytusuarioId")
//Set<ModelUzyTPerfilUsuario> findByUsuarioId(@Param("uzytusuarioId") Long uzytusuarioId);
}
}
\ No newline at end of file
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTUsuario.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Dao
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Dao
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.jpa.repository.Query
;
...
@@ -8,6 +9,7 @@ import org.springframework.stereotype.Repository;
...
@@ -8,6 +9,7 @@ import org.springframework.stereotype.Repository;
import
java.util.List
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.Set
;
@Repository
@Repository
public
interface
DaoUzyTUsuario
extends
JpaRepository
<
ModelUzyTUsuario
,
Long
>
{
public
interface
DaoUzyTUsuario
extends
JpaRepository
<
ModelUzyTUsuario
,
Long
>
{
...
@@ -34,5 +36,7 @@ public interface DaoUzyTUsuario extends JpaRepository<ModelUzyTUsuario, Long> {
...
@@ -34,5 +36,7 @@ public interface DaoUzyTUsuario extends JpaRepository<ModelUzyTUsuario, Long> {
ModelUzyTUsuario
findByUsername
(
@Param
(
"username"
)
String
username
);
ModelUzyTUsuario
findByUsername
(
@Param
(
"username"
)
String
username
);
@Query
(
"SELECT u.uzytperfils FROM ModelUzyTUsuario u WHERE u.uzytusuario_id = :uzytusuario_id"
)
Set
<
ModelUzyTPerfil
>
findPerfilesByUsuarioId
(
@Param
(
"uzytusuario_id"
)
Long
uzytusuario_id
);
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTPerfil.java
View file @
2cc8e6c9
...
@@ -2,10 +2,14 @@ package ec.edu.espe.movilidad.MovilidadWS.Dto;
...
@@ -2,10 +2,14 @@ package ec.edu.espe.movilidad.MovilidadWS.Dto;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.Set
;
@Data
@Data
public
class
DtoUzyTPerfil
{
public
class
DtoUzyTPerfil
{
private
Long
uzytperfil_id
;
private
Long
uzytperfil_id
;
private
String
uzytperfil_nombre
;
private
String
uzytperfil_nombre
;
private
Set
<
DtoUzyTUsuario
>
usuarios
;
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTUsuario.java
View file @
2cc8e6c9
...
@@ -2,6 +2,7 @@ package ec.edu.espe.movilidad.MovilidadWS.Dto;
...
@@ -2,6 +2,7 @@ package ec.edu.espe.movilidad.MovilidadWS.Dto;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.Set
;
@Data
@Data
public
class
DtoUzyTUsuario
{
public
class
DtoUzyTUsuario
{
...
@@ -32,4 +33,7 @@ public class DtoUzyTUsuario {
...
@@ -32,4 +33,7 @@ public class DtoUzyTUsuario {
private
String
spbpers_sex
;
private
String
spbpers_sex
;
private
String
uzytusuario_campus
;
private
String
uzytusuario_campus
;
private
String
uzytusuario_departamento
;
private
String
uzytusuario_departamento
;
private
Set
<
DtoUzyTPerfil
>
perfiles
;
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Mapper/Components_Class/UzyTPerfilMapper.java
View file @
2cc8e6c9
...
@@ -5,6 +5,7 @@ import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
...
@@ -5,6 +5,7 @@ import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
org.modelmapper.ModelMapper
;
import
org.modelmapper.ModelMapper
;
...
@@ -32,4 +33,14 @@ public class UzyTPerfilMapper {
...
@@ -32,4 +33,14 @@ public class UzyTPerfilMapper {
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
}
}
public
Set
<
DtoUzyTPerfil
>
entitiesToDtosSet
(
Set
<
ModelUzyTPerfil
>
entities
)
{
return
entities
.
stream
()
.
map
(
this
::
entityToDto
)
.
collect
(
Collectors
.
toSet
());
}
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTUsuario/IServiceUzyTUsuario.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTUsuario
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
public
interface
IServiceUzyTUsuario
{
public
interface
IServiceUzyTUsuario
{
...
@@ -15,5 +17,9 @@ public interface IServiceUzyTUsuario {
...
@@ -15,5 +17,9 @@ public interface IServiceUzyTUsuario {
DtoUzyTUsuario
editar
(
Long
id
,
DtoUzyTUsuario
dtoUzyTUsuario
);
DtoUzyTUsuario
editar
(
Long
id
,
DtoUzyTUsuario
dtoUzyTUsuario
);
Set
<
DtoUzyTPerfil
>
findPerfilesByUsuarioId
(
Long
uzytusuario_id
);
void
asignarPerfilAUsuario
(
Long
uzytusuario_id
,
Long
uzytperfil_id
);
boolean
eliminar
(
Long
id
);
boolean
eliminar
(
Long
id
);
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTUsuario/ServiceUzyTUsuario.java
View file @
2cc8e6c9
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTUsuario
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException
;
import
ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException
;
import
ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTPerfilMapper
;
import
ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTUsuarioMapper
;
import
ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTUsuarioMapper
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
@Service
@Service
public
class
ServiceUzyTUsuario
implements
IServiceUzyTUsuario
{
public
class
ServiceUzyTUsuario
implements
IServiceUzyTUsuario
{
private
final
DaoUzyTUsuario
daoUzyTUsuario
;
private
final
DaoUzyTUsuario
daoUzyTUsuario
;
private
final
DaoUzyTPerfil
daoUzyTPerfil
;
private
final
UzyTUsuarioMapper
mapper
;
private
final
UzyTUsuarioMapper
mapper
;
public
ServiceUzyTUsuario
(
DaoUzyTUsuario
daoUzyTUsuario
,
UzyTUsuarioMapper
mapper
)
{
private
final
UzyTPerfilMapper
mapperPerfil
;
public
ServiceUzyTUsuario
(
DaoUzyTUsuario
daoUzyTUsuario
,
DaoUzyTPerfil
daoUzyTPerfil
,
UzyTUsuarioMapper
mapper
,
UzyTPerfilMapper
mapperPerfil
)
{
this
.
daoUzyTUsuario
=
daoUzyTUsuario
;
this
.
daoUzyTUsuario
=
daoUzyTUsuario
;
this
.
daoUzyTPerfil
=
daoUzyTPerfil
;
this
.
mapper
=
mapper
;
this
.
mapper
=
mapper
;
this
.
mapperPerfil
=
mapperPerfil
;
}
}
...
@@ -94,6 +105,15 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
...
@@ -94,6 +105,15 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
throw
new
ResourceNotFoundException
(
"Error al editar el registro: "
+
e
.
getMessage
());
throw
new
ResourceNotFoundException
(
"Error al editar el registro: "
+
e
.
getMessage
());
}
}
}
}
@Override
public
Set
<
DtoUzyTPerfil
>
findPerfilesByUsuarioId
(
Long
uzytusuario_id
)
{
Set
<
ModelUzyTPerfil
>
perfiles
=
daoUzyTUsuario
.
findPerfilesByUsuarioId
(
uzytusuario_id
);
return
mapperPerfil
.
entitiesToDtosSet
(
perfiles
);
}
@Override
@Override
public
boolean
eliminar
(
Long
id
)
{
public
boolean
eliminar
(
Long
id
)
{
ModelUzyTUsuario
entity
=
daoUzyTUsuario
.
findById
(
id
).
orElse
(
null
);
ModelUzyTUsuario
entity
=
daoUzyTUsuario
.
findById
(
id
).
orElse
(
null
);
...
@@ -103,4 +123,14 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
...
@@ -103,4 +123,14 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
}
}
return
false
;
return
false
;
}
}
@Override
public
void
asignarPerfilAUsuario
(
Long
uzytusuario_id
,
Long
uzytperfil_id
)
{
// Obtengo el usuario y perfil buscandolos por el ID
ModelUzyTUsuario
usuario
=
daoUzyTUsuario
.
findById
(
uzytusuario_id
).
get
();
ModelUzyTPerfil
perfil
=
daoUzyTPerfil
.
findById
(
uzytperfil_id
).
get
();
// Aquí asigno el perfil al usuario
usuario
.
getUzytperfils
().
add
(
perfil
);
daoUzyTUsuario
.
save
(
usuario
);
}
}
}
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