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
b952df05
Commit
b952df05
authored
Jun 25, 2023
by
Joel Andres Molina Velez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Se modifican los servicios de ModelUzyTaValorPar
parent
e059da27
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
114 additions
and
69 deletions
+114
-69
UzyTaValorParController.java
...lidad/MovilidadWS/Controller/UzyTaValorParController.java
+13
-12
UzyTavParaEvaController.java
...lidad/MovilidadWS/Controller/UzyTavParaEvaController.java
+1
-1
DaoUzyTaValorPar.java
.../edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTaValorPar.java
+1
-1
DaoUzyTavParaEva.java
.../edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTavParaEva.java
+1
-1
DtoUzyTaValorPar.java
.../edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTaValorPar.java
+2
-2
UzyTaValorParMapper.java
...ilidadWS/Mapper/Components_Class/UzyTaValorParMapper.java
+24
-2
ModelUzyTaValorPar.java
.../espe/movilidad/MovilidadWS/Model/ModelUzyTaValorPar.java
+5
-4
IServiceUzyTaValorPar.java
...ilidadWS/Service/UzyTaValorPar/IServiceUzyTaValorPar.java
+8
-9
ServiceUzyTaValorPar.java
...vilidadWS/Service/UzyTaValorPar/ServiceUzyTaValorPar.java
+57
-35
IServiceUzyTavParaEva.java
...ilidadWS/Service/UzyTavParaEva/IServiceUzyTavParaEva.java
+1
-1
ServiceUzyTavParaEva.java
...vilidadWS/Service/UzyTavParaEva/ServiceUzyTavParaEva.java
+1
-1
No files found.
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Controller/UzyTaValorParController.java
View file @
b952df05
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTaValorPar.IServiceUzyTaValorPar
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.List
;
import
static
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Constant
.
GlobalConstants
.
V1_API_VERSION
;
...
...
@@ -23,19 +22,20 @@ public class UzyTaValorParController {
@GetMapping
(
"/exampleFindId/{id}"
)
public
ResponseEntity
<
Model
UzyTaValorPar
>
ListarPorID
(
@PathVariable
Long
id
)
{
public
ResponseEntity
<
Dto
UzyTaValorPar
>
ListarPorID
(
@PathVariable
Long
id
)
{
return
new
ResponseEntity
<>(
serviceUzyTaValorPar
.
ListarPorID
(
id
),
HttpStatus
.
OK
);
}
@GetMapping
(
"/getAll"
)
public
ResponseEntity
<
List
<
Model
UzyTaValorPar
>>
ListarRegistros
()
{
public
ResponseEntity
<
List
<
Dto
UzyTaValorPar
>>
ListarRegistros
()
{
return
new
ResponseEntity
<>(
serviceUzyTaValorPar
.
ListarRegistros
(),
HttpStatus
.
OK
);
}
//Servicio para obtener los datos de valorPar relacionados con ParaEva
@GetMapping
(
"/datosRealacionadosParaEva/{id}"
)
public
List
<
ModelUzyTaValorPar
>
findByIdDatosRelacionadosConParaEva
(
@PathVariable
(
"id"
)
Long
id
)
{
return
serviceUzyTaValorPar
.
findByIdDatosRelacionadosConParaEva
(
id
);
public
ResponseEntity
<
List
<
Object
[]>>
findByIdDatosRelacionadosConParaEva
(
@PathVariable
(
"id"
)
Long
id
)
{
List
<
Object
[]>
result
=
serviceUzyTaValorPar
.
findByIdDatosRelacionadosConParaEva
(
id
);
return
new
ResponseEntity
<>(
result
,
HttpStatus
.
OK
);
}
//Servicio para obtener los datos de paraeva relacionados con ValorPar
...
...
@@ -45,16 +45,17 @@ public class UzyTaValorParController {
return
new
ResponseEntity
<>(
result
,
HttpStatus
.
OK
);
}
@PostMapping
(
"/guardar"
)
public
ResponseEntity
<
ModelUzyTaValorPar
>
guardar
(
@RequestParam
(
"uzytavparaeva_id"
)
Long
uzytavparaeva_id
,
@RequestBody
ModelUzyTaValorPar
model
UzyTaValorPar
)
{
ModelUzyTaValorPar
creado
=
serviceUzyTaValorPar
.
guardar
(
uzytavparaeva_id
,
model
UzyTaValorPar
);
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
body
(
cread
o
);
public
ResponseEntity
<
DtoUzyTaValorPar
>
guardar
(
@Valid
@RequestBody
DtoUzyTaValorPar
dto
UzyTaValorPar
)
{
DtoUzyTaValorPar
savedDto
=
serviceUzyTaValorPar
.
guardar
(
dto
UzyTaValorPar
);
return
ResponseEntity
.
ok
(
savedDt
o
);
}
@PutMapping
(
"/editar/{id}"
)
public
ResponseEntity
<
ModelUzyTaValorPar
>
editar
(
@PathVariable
Long
id
,
@RequestBody
ModelUzyTaValorPar
model
UzyTaValorPar
)
{
return
new
ResponseEntity
<>(
serviceUzyTaValorPar
.
editar
(
id
,
model
UzyTaValorPar
),
HttpStatus
.
OK
);
public
ResponseEntity
<
DtoUzyTaValorPar
>
editar
(
@PathVariable
Long
id
,
@RequestBody
DtoUzyTaValorPar
dto
UzyTaValorPar
)
{
return
new
ResponseEntity
<>(
serviceUzyTaValorPar
.
editar
(
id
,
dto
UzyTaValorPar
),
HttpStatus
.
OK
);
}
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Controller/UzyTavParaEvaController.java
View file @
b952df05
...
...
@@ -39,7 +39,7 @@ public class UzyTavParaEvaController {
}
@GetMapping
(
"/datosRelacionadosCabParaEvaf/{id}"
)
public
ResponseEntity
<
List
<
Object
[]>>
obtenerPorDatosUzytavcabparaevafId
(
@PathVariable
(
"id"
)
Integer
id
)
{
public
ResponseEntity
<
List
<
Object
[]>>
obtenerPorDatosUzytavcabparaevafId
(
@PathVariable
(
"id"
)
Long
id
)
{
List
<
Object
[]>
dtos
=
serviceUzyTavParaEva
.
findByDatosUzytavcabparaevafId
(
id
);
return
ResponseEntity
.
ok
(
dtos
);
}
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTaValorPar.java
View file @
b952df05
...
...
@@ -13,7 +13,7 @@ public interface DaoUzyTaValorPar extends JpaRepository<ModelUzyTaValorPar, Long
//Obtener los datos relacionados con la tabla ParaEva mediante un id
@Query
(
"SELECT p FROM ModelUzyTaValorPar p INNER JOIN p.uzyTavParaEva c WHERE c.uzytavparaeva_id = :id"
)
List
<
ModelUzyTaValorPar
>
findByIdDatosRelacionadosConParaEva
(
@Param
(
"id"
)
Long
id
);
List
<
Object
[]
>
findByIdDatosRelacionadosConParaEva
(
@Param
(
"id"
)
Long
id
);
@Query
(
"SELECT vp, pe FROM ModelUzyTaValorPar vp JOIN vp.uzyTavParaEva pe"
)
List
<
Object
[]>
getAllDatosRelacionadosParaEva
();
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTavParaEva.java
View file @
b952df05
...
...
@@ -31,6 +31,6 @@ public interface DaoUzyTavParaEva extends JpaRepository<ModelUzyTavParaEva, Long
@Query
(
"SELECT p FROM ModelUzyTavParaEva p WHERE p.uzytavcabparaevaf_id = :id"
)
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
@Param
(
"id"
)
Integer
id
);
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
@Param
(
"id"
)
Long
id
);
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dto/DtoUzyTaValorPar.java
View file @
b952df05
...
...
@@ -8,7 +8,7 @@ public class DtoUzyTaValorPar {
private
Long
uzytavaloruzytparametros_id
;
private
Long
uzytavparaeva_id
;
private
String
uzytavalorpar_descrip
;
private
Long
uzytavalorpar_puntaje
;
private
Long
uzytavalorpar_orden
;
private
Integer
uzytavalorpar_puntaje
;
private
Integer
uzytavalorpar_orden
;
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Mapper/Components_Class/UzyTaValorParMapper.java
View file @
b952df05
...
...
@@ -2,15 +2,22 @@ package ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavParaEva
;
import
org.modelmapper.ModelMapper
;
import
org.modelmapper.PropertyMap
;
import
org.springframework.stereotype.Component
;
import
javax.persistence.EntityManager
;
@Component
public
class
UzyTaValorParMapper
{
private
final
ModelMapper
modelMapper
;
public
UzyTaValorParMapper
(
ModelMapper
modelMapper
)
{
private
final
EntityManager
entityManager
;
public
UzyTaValorParMapper
(
ModelMapper
modelMapper
,
EntityManager
entityManager
)
{
this
.
modelMapper
=
modelMapper
;
this
.
entityManager
=
entityManager
;
configureMappings
();
}
public
DtoUzyTaValorPar
entityToDto
(
ModelUzyTaValorPar
entity
)
{
...
...
@@ -18,6 +25,21 @@ public class UzyTaValorParMapper {
}
public
ModelUzyTaValorPar
dtoToEntity
(
DtoUzyTaValorPar
dto
)
{
return
modelMapper
.
map
(
dto
,
ModelUzyTaValorPar
.
class
);
ModelUzyTaValorPar
entity
=
modelMapper
.
map
(
dto
,
ModelUzyTaValorPar
.
class
);
Long
paraevaId
=
dto
.
getUzytavparaeva_id
();
ModelUzyTavParaEva
paraeva
=
entityManager
.
find
(
ModelUzyTavParaEva
.
class
,
paraevaId
);
entity
.
setUzyTavParaEva
(
paraeva
);
return
entity
;
}
private
void
configureMappings
()
{
modelMapper
.
addMappings
(
new
PropertyMap
<
ModelUzyTaValorPar
,
DtoUzyTaValorPar
>()
{
@Override
protected
void
configure
()
{
map
().
setUzytavaloruzytparametros_id
(
source
.
getUzytavaloruzytparametros_id
());
map
().
setUzytavparaeva_id
(
source
.
getUzyTavParaEva
().
getUzytavparaeva_id
());
}
});
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Model/ModelUzyTaValorPar.java
View file @
b952df05
...
...
@@ -2,12 +2,14 @@ package ec.edu.espe.movilidad.MovilidadWS.Model;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
javax.persistence.*
;
import
java.util.Set
;
@Data
@Getter
@Setter
@Entity
@Table
(
name
=
"uzytavalorpar"
,
schema
=
"UTIC1"
)
public
class
ModelUzyTaValorPar
{
...
...
@@ -31,8 +33,7 @@ public class ModelUzyTaValorPar {
//RELACIÓN CON TAVPARAEVA- TABLA PADRE
@JsonIgnore
@ManyToOne
(
cascade
=
CascadeType
.
ALL
)
@ManyToOne
@JoinColumn
(
name
=
"uzytavparaeva_id"
,
referencedColumnName
=
"uzytavparaeva_id"
)
private
ModelUzyTavParaEva
uzyTavParaEva
;
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTaValorPar/IServiceUzyTaValorPar.java
View file @
b952df05
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTaValorPar
;
import
java.util.List
;
public
interface
IServiceUzyTaValorPar
{
public
Model
UzyTaValorPar
ListarPorID
(
Long
id
);
Dto
UzyTaValorPar
ListarPorID
(
Long
id
);
public
List
<
Model
UzyTaValorPar
>
ListarRegistros
();
List
<
Dto
UzyTaValorPar
>
ListarRegistros
();
public
List
<
ModelUzyTaValorPar
>
findByIdDatosRelacionadosConParaEva
(
Long
id
);
List
<
Object
[]
>
findByIdDatosRelacionadosConParaEva
(
Long
id
);
public
List
<
Object
[]>
getAllDatosRelacionadosParaEva
();
List
<
Object
[]>
getAllDatosRelacionadosParaEva
();
public
ModelUzyTaValorPar
guardar
(
Long
uzytavconparaeva_id
,
ModelUzyTaValorPar
model
UzyTaValorPar
);
DtoUzyTaValorPar
guardar
(
DtoUzyTaValorPar
dto
UzyTaValorPar
);
public
ModelUzyTaValorPar
editar
(
Long
id
,
ModelUzyTaValorPar
model
UzyTaValorPar
);
DtoUzyTaValorPar
editar
(
Long
id
,
DtoUzyTaValorPar
dto
UzyTaValorPar
);
void
eliminar
(
Long
id
);
boolean
eliminar
(
Long
id
);
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTaValorPar/ServiceUzyTaValorPar.java
View file @
b952df05
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTavParaEva
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException
;
import
ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTaValorParMapper
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTaValorPar
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavParaEva
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
javax.persistence.EntityNotFoundException
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Service
public
class
ServiceUzyTaValorPar
implements
IServiceUzyTaValorPar
{
@Autowired
DaoUzyTaValorPar
daoUzyTaValorPar
;
@Autowired
DaoUzyTavParaEva
daoUzyTavParaEva
;
private
final
DaoUzyTaValorPar
daoUzyTaValorPar
;
private
final
UzyTaValorParMapper
mapper
;
public
ServiceUzyTaValorPar
(
DaoUzyTaValorPar
daoUzyTaValorPar
,
UzyTaValorParMapper
mapper
)
{
this
.
daoUzyTaValorPar
=
daoUzyTaValorPar
;
this
.
mapper
=
mapper
;
}
@Override
public
ModelUzyTaValorPar
ListarPorID
(
@PathVariable
Long
id
)
{
return
daoUzyTaValorPar
.
findById
(
id
).
get
();
public
DtoUzyTaValorPar
ListarPorID
(
@PathVariable
Long
id
)
{
ModelUzyTaValorPar
entity
=
daoUzyTaValorPar
.
findById
(
id
)
.
orElseThrow
(()
->
new
ResourceNotFoundException
(
"No se encontró el registro con ID: "
+
id
));
return
mapper
.
entityToDto
(
entity
);
}
public
List
<
Object
[]>
getAllDatosRelacionadosParaEva
()
{
return
daoUzyTaValorPar
.
getAllDatosRelacionadosParaEva
();
}
@Override
public
List
<
ModelUzyTaValorPar
>
ListarRegistros
(
)
{
return
daoUzyTaValorPar
.
find
All
(
);
public
List
<
Object
[]>
findByIdDatosRelacionadosConParaEva
(
Long
id
)
{
return
daoUzyTaValorPar
.
find
ByIdDatosRelacionadosConParaEva
(
id
);
}
@Override
public
List
<
ModelUzyTaValorPar
>
findByIdDatosRelacionadosConParaEva
(
Long
id
)
{
return
daoUzyTaValorPar
.
findByIdDatosRelacionadosConParaEva
(
id
);
public
List
<
DtoUzyTaValorPar
>
ListarRegistros
()
{
List
<
ModelUzyTaValorPar
>
entities
=
daoUzyTaValorPar
.
findAll
();
return
entities
.
stream
()
.
map
(
mapper:
:
entityToDto
)
.
collect
(
Collectors
.
toList
());
}
@Override
public
ModelUzyTaValorPar
guardar
(
@PathVariable
Long
uzytavparaeva_id
,
ModelUzyTaValorPar
modelUzyTaValorPar
)
{
ModelUzyTavParaEva
modelUzyTavParaEva
=
daoUzyTavParaEva
.
findById
(
uzytavparaeva_id
)
.
orElseThrow
(()
->
new
EntityNotFoundException
(
"No se encontró la entidad ModelUzyTaParaEva con el ID proporcionado"
));
modelUzyTaValorPar
.
setUzyTavParaEva
(
modelUzyTavParaEva
);
return
daoUzyTaValorPar
.
save
(
modelUzyTaValorPar
);
public
DtoUzyTaValorPar
guardar
(
DtoUzyTaValorPar
dtoUzyTaValorPar
)
{
ModelUzyTaValorPar
entity
=
mapper
.
dtoToEntity
(
dtoUzyTaValorPar
);
ModelUzyTaValorPar
nuevoEntity
=
daoUzyTaValorPar
.
save
(
entity
);
return
mapper
.
entityToDto
(
nuevoEntity
);
}
@Override
public
ModelUzyTaValorPar
editar
(
@PathVariable
Long
id
,
ModelUzyTaValorPar
modelUzyTaValorPar
)
{
ModelUzyTaValorPar
dato
=
daoUzyTaValorPar
.
findById
(
id
).
get
();
//.orElseThrow(()->new ControlExcepciones("No existe el registro con el ID : " + id));
public
DtoUzyTaValorPar
editar
(
@PathVariable
Long
id
,
DtoUzyTaValorPar
dtoUzyTaValorPar
)
{
try
{
ModelUzyTaValorPar
entity
=
daoUzyTaValorPar
.
findById
(
id
).
get
();
//Seteamos los nuevos datos del registro
dato
.
setUzytavaloruzytparametros_id
(
modelUzyTaValorPar
.
getUzytavaloruzytparametros_id
());
//dato.setUzytavparaeva_id(modelUzyTaValorPar.getUzytavparaeva_id());
dato
.
setUzytavalorpar_descrip
(
modelUzyTaValorPar
.
getUzytavalorpar_descrip
());
dato
.
setUzytavalorpar_orden
(
modelUzyTaValorPar
.
getUzytavalorpar_orden
());
dato
.
setUzytavalorpar_puntaje
(
modelUzyTaValorPar
.
getUzytavalorpar_puntaje
());
ModelUzyTaValorPar
datoActualizado
=
daoUzyTaValorPar
.
save
(
dato
);
return
datoActualizado
;
if
(
entity
!=
null
)
{
entity
.
setUzytavaloruzytparametros_id
(
dtoUzyTaValorPar
.
getUzytavaloruzytparametros_id
());
entity
.
setUzytavalorpar_descrip
(
dtoUzyTaValorPar
.
getUzytavalorpar_descrip
());
entity
.
setUzytavalorpar_orden
(
dtoUzyTaValorPar
.
getUzytavalorpar_orden
());
entity
.
setUzytavalorpar_puntaje
(
dtoUzyTaValorPar
.
getUzytavalorpar_puntaje
());
ModelUzyTaValorPar
updatedEntity
=
daoUzyTaValorPar
.
save
(
entity
);
return
mapper
.
entityToDto
(
updatedEntity
);
}
else
{
throw
new
ResourceNotFoundException
(
"No se encontró el registro con ID: "
+
id
);
}
}
catch
(
Exception
e
)
{
throw
new
ResourceNotFoundException
(
"Error al editar el registro: "
+
e
.
getMessage
());
}
}
@Override
public
void
eliminar
(
@PathVariable
Long
id
)
{
ModelUzyTaValorPar
example
=
daoUzyTaValorPar
.
findById
(
id
).
get
();
//.orElseThrow(() -> new ControlExcepciones("No existe el registro con el ID : " + id));
daoUzyTaValorPar
.
delete
(
example
);
public
boolean
eliminar
(
Long
id
)
{
ModelUzyTaValorPar
entity
=
daoUzyTaValorPar
.
findById
(
id
).
orElse
(
null
);
if
(
entity
!=
null
)
{
daoUzyTaValorPar
.
delete
(
entity
);
return
true
;
}
return
false
;
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTavParaEva/IServiceUzyTavParaEva.java
View file @
b952df05
...
...
@@ -13,7 +13,7 @@ public interface IServiceUzyTavParaEva {
List
<
Object
[]>
findByIdDatosConParaEvaTipo2
(
Long
id
);
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
Integer
id
);
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
Long
id
);
List
<
Object
[]>
getAllDatosConParaEva
();
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTavParaEva/ServiceUzyTavParaEva.java
View file @
b952df05
...
...
@@ -49,7 +49,7 @@ public class ServiceUzyTavParaEva implements IServiceUzyTavParaEva {
}
@Override
public
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
Integer
id
)
{
public
List
<
Object
[]>
findByDatosUzytavcabparaevafId
(
Long
id
)
{
return
daoUzyTavParaEva
.
findByDatosUzytavcabparaevafId
(
id
);
}
...
...
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