- Configuracion de la base de datos
- Configuracion de Glassfish
- Usuario
- Listar todos los usuarios
- Obtener un usuario por su ID
- Obtener usuario por su correo
- Login
- Registrar usuario
- Listar actividades en las que participa el usuario
- Listar actividades que organizo un usuario
- Agregar participacion de usuario en actividad
- Eliminar participacion de usuario en actividad
- Eliminar usuario
- Editar usuario
- Actividad
- Categoria
- Reporte
- Tipo
- En la carpeta
/DB
se encuentra el modelo (se abre con MySQL Workbench). Este modelo puede compilar codigo. - Tambien se encuentra en la carpeta la ultima version del codigo de la estructura de la base de datos (
schema.sql
). - Tambien hay un archivo con una poblacion inicial (
poblacion.sql
). - La base de datos debe llamarse
recreu
.
Crear la siguiente Pool en Glassfish
jdbc/recreu_pool
No olvidar colocar los atributos usuario, password y URL al crear esta pool. La URL es algo como jdbc:mysql://localhost:3306/recreu
.
GET /usuarios
Se pueden pasar parametros extra agregando al final algo como ?mostrar=20&ultima_id=223
.
Diccionario de parametros:
- mostrar (numero): Pone un limite a cuantos elementos mostrar. Equivalente a
LIMIT
en SQL. - ultima_id (numero): Sirve para paginar. Entrega los elementos cuya id es menor a
ultima_id
. Ademas pone el orden enORDER BY id DESC
. En conjunto con el parametromostrar
, sirve para paginar, ya que se puede obtener un numero de elementos, por ejemplo 5, y luego obtener los siguiente 5 elementos (indicando la ultima id de la pagina anterior). Si el valor es 0, entonces se entrega la primera pagina.
Ejemplos:
- Si existen 15 elementos ordenados numerados perfectamente con ID ascendente, y si se hace
/usuarios?mostrar=5&ultima_id=0
, entonces se obtienen los usuarios ids 15, 14, 13, 12, 11. Luego para obtener la siguiente pagina, se ejecuta/usuarios?mostrar=5&ultima_id=11
(ya que la ultima ID de la primera pagina fue 11), y se obtienen los usuarios con ids 10, 9, 8, 7, 6. - En el caso anterior, si se ejecuta
/usuarios?ultima_id=0
se obtienen todos los elementos empezando desde el 15 hasta el 1. - Y si se ejecuta
/usuarios?mostrar=2
se obtienen los usuarios 1 y 2, ya quemostrar
no ordena descendientemente.
GET /usuarios/{usuario_id}
GET /usuarios/buscar?correo={correo}
El correo puede tener @usach.cl
o no. Estar en minusculas o mayusculas, nada de eso afecta.
Arroja codigo exitoso 200 en ambos casos (si encuentra o no un usuario), pero cuando lo encuentra, retorna el JSON, y cuando no lo encuentra, no entrega ningun JSON.
POST /usuarios/login
Retorna codigo de estado 200 (OK)
y el JSON con el usuario en caso de login correcto, y en caso de login incorrecto, retorna otro codigo de estado. El correo puede tener mayusculas y minusculas (no afecta), pero la password debe ser igual que como se registro.
Alternativa #1: Sin incluir @usach.cl
{
"correo":"correo",
"password":"pass"
}
Alternativa #2: Con @usach.cl
{
"correo":"correo@usach.cl",
"password":"pass"
}
POST /usuarios
El formato del JSON debe ser:
{
"apellidoMaterno":"cespedes",
"apellidoPaterno":"vilches",
"primerNombre":"felipe",
"segundoNombre":"chris",
"correo":"correo.sin.arroba.usach",
"password":"pass.minimo.6.caracteres",
"fechaNacimiento":"1991-10-24",
"sexo": true,
"esAdministrador": false
}
Al registrar usuario, los siguientes atributos son opcionales (ya que se pueden agregar despues, cuando el usuario quiera configurar su perfil):
numeroTelefono
intereses
urlFacebook
urlInstagram
urlTwitter
carrera
(asume que la BD no tiene todas las carreras, por lo cual algunos usuarios pueden no indicar su carrera, ademas pueden ser profesores, por eso no lo puse como mandatorio)
En caso de querer incorporar la carrera, se pone de esta forma
{
"correo":"correo.sin.arroba.usach",
"carrera":{
"carreraId": 4
},
"sexo": true
}
Los demas atributos (disponibilidad
, last_update
, etc) no se insertan al registrar usuario (se ignoran).
GET /usuarios/{usuario_id}/actividades
Permite los parametros limit_a, limit_b y nofinalizadas, ejemplo:
GET /usuarios/2/actividades?limit_a=1&limit_b=2
O tambien
GET /usuarios/2/actividades?nofinalizadas
GET /usuarios/{usuario_id}/actividades/?organizador
POST /usuarios/{usuario_id}/actividades/{actividad_id}
DELETE /usuarios/{usuario_id}/actividades/{actividad_id}
DELETE /usuarios/{usuario_id}
Si lo elimina exitosamente, retorna codigo de estado 200 (OK)
, y retorna codigo de error en caso que el usuario no existe.
PUT /usuarios
Resumen: Enviar como JSON el mismo objeto, pero con atributos extra (para agregar atributos que antes eran null
), o eliminando atributos (para que ahora sean null
), y los atributos pueden tener valores distintos para modificarlos en la BD. En otras palabras, el JSON no "parcha" el objeto original, si no que lo sobreescribe completamente, por lo que si faltan atributos en el nuevo JSON, se escriben en la BD como nulo (si es que lo permite), en vez de dejar el valor original.
Se puede modificar un usuario existente, por ejemplo, para agregarle intereses, o URLs de Instagram, Facebook, Twitter, o para modificar cualquier cosa.
Por ejemplo, inicialmente un usuario podria no tener el atributo "urlInstagram": "..."
en su JSON (eso es porque en la BD seria null
). Si se quiere agregar una URL de instagram, lo que se debe hacer en ese caso, es agregar el atributo a su JSON, y enviarlo a la URL usando PUT
. Notese que el JSON a enviar, debe contener todos los atributos, incluso si solo se quiere modificar uno.
Tambien se puede eliminar el atributo de la URL de instagram, y nuevamente enviar el JSON, lo cual eliminaria su URL de instagram (la pondria en null
).
Para editar la carrera, basta con modificar la ID de la carrera, y no los otros atributos (ya que son ignorados).
Los atributos created_at
y last_update
son ignorados.
GET /actividades
Diccionario de parametros extra:
- mostrar (numero): Limite de cuantos elementos se quieren ver. Equivalente a: Listar todos los usuarios
- limit_a y limit_b: Sirve tambien para paginar. El parametro limit_a indica en que posicion comienza (si el valor es 0, entonces entrega la primera fila), y limit_b indica la cantidad de filas que se desea obtener.
- ultima_id (numero): Obtener los elementos a partir de la ultima_id. Sirve para paginar. Equivalente a: Listar todos los usuarios
- tipos: Sirve para obtener la union de actividades que pertenecen a los tipos de la lista entregada. Ejemplos de formato es:
?tipos=2
?tipos=2-3-4
?tipos=2-7-8-9-3
- Parametros georeferenciales: Para hacer una busqueda geografica, tienen que existir estos tres parametros (simultaneamente):
- latitud: Latitud donde centrar la busqueda.
- longitud: Longitud donde centrar la busqueda.
- ladocuadrado: Una vez centrada la busqueda, se crea un cuadrado de lado
ladocuadrado
alrededor del centro, y se filtran las actividades, mostrando solo las que estan dentro de este cuadrado.
- nofinalizadas: Filtra las actividades para mostrar solamente las que no han finalizado (se calcula con su tiempo de inicio y duracion estimada). Este parametro no tiene valor, simplemente se pone asi
var=1&nofinalizadas&dato=2
- Parametros de notificaciones: Para obtener las "notificaciones", no se debe usar el parametro
nofinalizadas
, y se debe usar estos parametros (todos simultaneamente):
- usuario_no_participa: Id del usuario. Las actividades mostradas seran solo las cuales el usuario no participa ni organiza.
- minutos: La actividad comienza dentro de cuantos minutos. Si se pone 30 minutos, quiere decir que la actividad comienza en un momento que esta dentro del rango ahora, y ahora+30min.
- Se pueden usar otros parametros de ubicacion geografica, en conjunto con estos parametros.
- activas: Parametro (sin valor) que filtra para mostrar solo las que estan activas (
es_activo = true
en la base de datos). Se utiliza de esta forma/actividades?activas
- tiempo_inicio y tiempo_fin: Sirve para entregar solo las que se encuentran dentro del rango de fechas, es decir, las que tienen como fecha de inicio dentro de ese rango. El formato es
YY-MM-DD-hh:mm:ss
(Año, mes, dia, hora, minutos, y segundos, en ese orden, cada numero separado por UN caracter, de los cuales puede ser alguno de estos:-_
). Ver ejemplo de uso mas abajo.
- Si solo se pone tiempo_inicio, entonces se muestran las que empiezan luego de esa fecha (sin limite superior).
Ejemplo con varios parametros:
GET /actividades/?latitud=7&longitud=550&ladocuadrado=100&tipos=13&mostrar=2&ultima_id=39
Otro ejemplo con notificaciones
GET /actividades/?latitud=7&longitud=505&ladocuadrado=1000&minutos=35&usuario_no_participa=2
Ejemplo con fechas:
GET /actividades/?tiempo_inicio=2016-06-01-00:00:00&tiempo_fin=2016-11-05-00:10:00
GET /actividades/?tiempo_inicio=2016-07-01-00:00:00
GET /actividades/{actividad_id}
GET /actividades/organizador/{usuario_organizador_id}
GET /actividades/categoria/{nombre_categoria}
El nombre de la categoria debe respetar minusculas y mayusculas.
Ejemplo (limit_a es para que los resultados empiecen desde la fila 2 (numero empieza desde 0), y limit_b es para mostrar un total de 3 filas)
GET /actividades/categoria/Deporte?limit_a=2&limit_b=3
Tambien acepta el parametro nofinalizadas, ejemplo
GET /actividades/categoria/Deporte?nofinalizadas
POST /actividades
Ejemplo de json:
{
"cuerpoActividad": "Cuerpo actividad 7",
"duracionEstimada": "02:01:15",
"fechaInicio": "2016-05-02T08:15:03-03:00",
"requerimientosActividad": "Requerimientos actividad 7",
"tipo": {
"tipoId": 13
},
"tituloActividad": "Titulo actividad 7",
"organizador":{
"usuarioId": 3
},
"ubicacionActividadX": 8,
"ubicacionActividadY": 552
}
Nota: En fecha de inicio hay un -03:00
. Esto se debe a que Chile se encuentra -3 horas desde Londres. Esto se puede omitir, y colocar solamente 2016-05-02T08:15:03
. (Preferiblemente utilizar alguna funcion prefabricada que genere fechas y/o horas)
GET /actividades/{actividad_id}/usuarios
PUT /actividades/
Debe enviarse el JSON conteniendo los atributos con sus valores actuales, y los nuevos valores en los atributos que se quieren cambiar. El tipo y organizador se puede simplificar a solo su ID. Ejemplo:
{
"actividadId": 3,
"cuerpoActividad": "Cuerpo actividad 3",
"duracionEstimada": "02:00:10-03:00",
"esActivo": true,
"fechaInicio": "2016-05-02T05:10:07-03:00",
"organizador": {
"usuarioId": 1
},
"personasMaximas": 5,
"requerimientosActividad": "Requerimientos actividad 3",
"tipo": {
"tipoId": 12
},
"tituloActividad": "Titulo actividad 3",
"ubicacionActividadX": 85,
"ubicacionActividadY": 50
}
GET /categorias
GET /categorias/{categoria_id}/tipos
GET /reportes
Diccionario de parametros extra:
- mostrar (numero): Limite de cuantos elementos se quieren ver. Equivalente a: Listar todos los usuarios
- ultima_id (numero): Obtener los elementos a partir de la ultima_id. Sirve para paginar. Equivalente a: Listar todos los usuarios
- no_revisados: Sirve para listar solamente los reportes que aun no se han revisado. Este parametro no tiene valor, por ejemplo
?param1=hola&no_revisados¶m2=100
.
GET /reportes/{reporte_id}
PUT /reportes/{reporte_id}/revisar/{administrador_id}
El parametro administrador_id
es la id del usuario administrador que revisa el reporte.
GET /tipos