# MeApunto endpoints
### POST /login
##### Request
```
{
username: 'asdf',
password: 'asdf',
}
```
##### Response
```
{
refresh: '12asdf',
access: 'qwasdf',
}
```
### POST /register
##### Request
```
{
picture: '',
firstName: '',
lastName: '',
username: '',
email: '',
phone: '',
password: '',
positions: ['DEF', 'ARQ'],
gender: 'M',
leg: 'D'
}
```
##### Response
```
{
refresh: '12asdf',
access: 'qwasdf',
}
```
### GET /statics
##### Response
```
{
legs: [
{ id: 1, description: "izquierda" }
],
players: [
{ id: 1, description: "11-11", formationId: 1 }
],
hours: [
{ id: 1, description: "8:00" }
],
minPrice: 0,
maxPrice: 200,
positions: [
{ id: 1, description: "Delantero" }
],
hoursRange: [
{id: 1, description: '8:00 - 9:00'}
],
genders: [
{id: 1, 'Solo hombres'},
{id: 2, 'Solo mujeres'},
{id: 3, 'Mixto'}
],
formations: [
{
id: 1,
//del arco hacia el medio campo
formation: [1, 4, 4, 2]
//un arquero, 4 defensas, 4 mediocampo, 2 delanteros
}
]
}
```
### GET /business/{businessId}
##### Response
```
{
id: 1,
address: 'asdf',
images: [ 'imageUrl1', 'imageUrl2'],
name: 'name',
description: 'asdf',
liked: false,
stadiums: [
{
id: 2,
name: 'name1',
playersId: 1,
price: 120,
}
]
}
```
### GET /friends
##### Request
URL params
```
?cursor={cursor}&first={pageSize}&query={query}&gender={genderId}
```
##### Response
```
{
pageInfo: {
hasNextPage: true,
endCursor: 11
},
results:[
{ id: 1, firstName: 'juan carlos', lastName: 'jara', positionId: 1, picture: ''}
]
}
```
### GET /groups
#### Request
URL params
```
?cursor={cursor}&first={pageSize}&query={query}
```
#### Response
```
{
pageInfo: {
hasNextPage: true,
endCursor: 11
},
results:[
{
id: 1,
name: 'group name',
//user ids
members: [
{ id: 1},
{ id: 2},
]
}
]
}
```
### GET /users
all users but me
#### Request
URL params
```
?cursor={cursor}&first={pageSize}&query={query}&gender={genderId}
```
#### Response
```
{
pageInfo: {
hasNextPage: true,
endCursor: 11
},
results:[
{
id: 1,
firstName: 'juan carlos',
lastName: 'jara',
positionId: 1,
picture: '',
isFriend: false | true
}
]
}
```
### GET /me
#### Response
```
{
username: 'juancjara',
firstName: 'Juan Carlos',
lastName: 'Jara Loayza',
gender: 'M',
positions: [1, 2],
age: 30 | undefined,
phone: 123123 | undefined,
email: 'juanc.jara@pucp.pe',
picture: 'url picture',
leg: 1,
coins: 0,
providerId: 123 | undefined, //Facebook id
defaultCard: {
id: 'asdfasdfa123asdf',
brand: 'Visa',
lastFour: '0001'
} | undefined
}
```
### POST /customGame
Game without stadium
https://xd.adobe.com/view/edc14cf1-038a-4e73-4131-1f76f6a50bc1-9bf0/screen/1d8f62e4-af0b-4c87-a667-c81fb54b9f1d/iPhone-X-XS-30
#### Request
```
{
name: '',
address: '',
//hour ids
hours: [1, 2, 3],
gender: 1,//gender id (solo hombres/ solo mujeres)
date: '12-05-2019',
playerId: 1,
position: '2,1', //segunda fila primer jugador (defensa izquierdo)
//arquero seria 0,0
team: 1 //1 o 2 team 1 es el de arriba y team 2 el de abajo,
inviteUsers: [1, 2, 3 ], //user ids
inviteGroups: [1 ,2, 3] // group ids,
openGame: true
}
```
### POST /reservation
#### Request
```
{
date: "25-04-2019",
hours: [1, 2],
stadiumId: 1,
coupon: 'ASDF' | null,
useCoins: true | false,
cardId: '1234'
}
````
### POST /organizeMatch (segundo flujo)
```
if goalkeeperPaysHalf is true -> payment is half
```
#### Request
```
{
date: "25-04-2019",
hours: [1, 2],
stadiumId: 1,
coupon: 'ASDF' | null,
useCoins: true | false,
cardId: '1234',
gender: 'O',
goalkeeperPaysHalf: true | false,
position: {
team: 1 | 2,
x: 0,
y: 0,
},
splitPayment: true | false,
inviteUsers: [1, 2, 3 ], //user ids
inviteGroups: [1 ,2, 3] // group ids,
openGame: true
}
```
### POST /cards
#### Request
```
{
cardNumber: '0111',
ccv: '123',
expirationMonth: '08',
expirationYear: '2020',
firstName: 'jc',
lastName: 'jara',
phone: 123123123,
address: '',
addressCity: '',
email: '',
}
```
#### Response
```
{
id: 'asf123',
brand: 'Visa',
lastFour: '0001'
}
```
### DELETE /cards/{CARD_ID}
### GET /cards
#### Response
```
[
{
lastFour: '1111',
brand: 'Visa',
id: 'a123af123'
}
]
```
### PUT /cards/${CARD_ID}/default
setea el card como default para el usuario logeado
### GET /token/{REFRESH_TOKEN}
#### Response
```
{
access: 'access token',
refresh: 'refresh token'
}
```
### PUT /users
#### Request
```
{
gender: 'M',
age: 30,
phone: '12313',
positions: [1, 2],
picture: 'url picture',
leg: 1,
newPassword: '******' | undefined
}
```
#### Response
```
{
gender: 'M',
positions: [1, 2],
age: 30 | undefined,
phone: 123123 | undefined,
email: 'juanc.jara@pucp.pe',
picture: 'url picture',
leg: 1,
...
}
```
### GET /notifications/unread
#### Response
```
{
count: 1,
}
```
### GET /notifications
#### Request
URL params
```
?cursor={cursor}&first={pageSize}&query={query}
```
#### Response
```
pageInfo: {
hasNextPage: false,
endCursor: 1,
},
results:
[
{
id: 1,
user: {
id: 1,
firstName: 'Juan Carlos',
lastName: 'Jara'
},
read: false,
type: 'GAME_INVITE',
data: {
gameId: '1'
},
dateTime: '2019-09-29 17:54:04'
},
{
id: 1,
user: { // usuario creador del partido
id: 1,
firstName: 'Juan Carlos',
lastName: 'Jara'
},
read: false,
type: 'CANCELED_GAME',
data: { //datos del partido cancelado
name: "Cancha numero 1",
hours: [
{id: 1,description: '8:00-9:00'},
{id: 2,description: '9:00-10:00'}
],
date: '19-09-2019', //fecha del partido
},
dateTime: '2019-09-29 17:54:04'
},
{
id: 1,
user: { // usuario creador del partido
id: 1,
firstName: 'Juan Carlos',
lastName: 'Jara'
},
read: false,
type: 'REFUNDED_GAME',
data: { //datos del partido cancelado
name: "Cancha numero 1",
hours: [
{id: 1,description: '8:00-9:00'},
{id: 2,description: '9:00-10:00'}
],
date: '19-09-2019',
coins: 30, //monedas retornadas
},
dateTime: '2019-09-29 17:54:04'
}
]
```
### PUT /notifications/{NOTIFICATION_ID}/read
### DELETE /notifications/{NOTIFICATION_ID}
### POST /coins/recharge
#### Request
```
{
coins: 20,
cardId: '1231',
}
```
#### Response
```
{
coins: 100
}
```
### POST /coins/transfer
#### Request
```
{
coins: 10,
to: '213' // user Id
}
```
#### Response
```
{
coins: 100
}
```
### POST /friends
#### Request
```
{
userId: '123'
}
```
### DELETE /friends/{userId}
### POST /groups
#### Request
```
{
name: 'nombre del grupo',
users: [1, 2] //user ids
}
```
#### Response
```
{
id: 1,
name: 'group name',
//user ids
members: [
{ id: 1},
{ id: 2},
]
}
```
### PUT /groups/{groupId}
```
{
name: 'nombre actualizado',
users: [1, 2] //user ids
}
```
### POST /account/forgotPassword
envia correo
#### Request
```
{
email: 'test@gmail.com'
}
```
### POST /account/forgotPassword/validate
#### Request
```
{
code: '12314',
email: 'test@gmail.com'
}
```
### POST /account/password
#### Request
```
{
code: '1234',
email: 'asdf@asf.com',
password: 'asdfasdf'
}
```
#### Response
```
{
access: 'access token',
refresh: 'refresh token'
}
```
### GET /games
##### Request
URL params
```
?cursor={cursor}&first={pageSize}&query={query}&gender={genderId}&players={players}&minPrice={minPrice}&maxPrice={maxPrice}&total={true|false}
```
total = true
##### Response
```
{
total: 33
}
```
total = false
##### Response
```
{
results: [
{
id: 1,
goalkeeperPaysHalf: true,
name: 'cancha 1',
picture: 'url image',
price: 23.4,
date: '18-09-2019',
latitude: 34.5,
longitude: 72.5,
hours: [
{id: 1, price: 14, description: '8:00-9:00'},
{id: 2, price: 20, description: '9:00-10:00'}
],
dueTime: '18-09-2019 13:40', //hora en la q se cierra el pago
players: 1, //playersId
availableSpots: 4 //espacios libres
}
],
pageInfo: {
hasNextPage: false,
endCursor: 1,
},
}
```
### GET games/{gameId}
##### Response
```
{
id: 1,
stadiumId: null | 1, //id nulo si es custom game
name: "Cancha numero 1",
address: 'av ...',
playersId: 1, //palyer id
hours: [
{id: 1, price: 14, description: '8:00-9:00'},
{id: 2, price: 20, description: '9:00-10:00'}
],
images: [ 'imageUrl1', 'imageUrl2'],
liked: false,
dueTime: '19-09-2019 13:40',
date: '19-09-2019',
availableSpots: 4,
price: 12.4,
goalkeeperPaysHalf: true,
splitPayment: true,
players: [
{
x: 0,
y: 1,
team: 1,
user: {
id: 1,
picture: 'url',
username: 'user',
firstName: 'Juan Carlos',
lastName: 'Jara'
}
}
],
team1: {
color: 'blue',
name: 'team A'
},
team2: {
color: 'red',
name: 'teamB'
},
}
```
### POST /organizeMatch/{match_Id}/payment
#### Request
```
{
coupon: 'ASDF' | null,
useCoins: true | false,
cardId: '1234',
position: {
team: 1 | 2,
x: 0,
y: 0,
},
}
```
### GET /mygames/favorites
### GET /mygames/pending
### GET /mygames/history
##### Request
URL params
```
?cursor={cursor}&first={pageSize}
```
##### Response
```
{
results: [
{
owner: { //user que creo el partido
id: 1,
firstName: 'juan carlos',
lastName: 'jara loayza'
},
status: 'PENDING' | 'ACCEPTED' | 'OWNER' | 'RESERVED' | 'PAID' | 'DECLINED',
id: 1,
goalkeeperPaysHalf: true,
name: 'cancha 1',
picture: 'url image',
price: 23.4, //Precio que pague
date: '18-09-2019',
hours: [
{id: 1, price: 14, description: '8:00-9:00'},
{id: 2, price: 20, description: '9:00-10:00'}
],
dueTime: '18-09-2019 13:40', //hora en la q se cierra el pago
players: 1, //playersId
availableSpots: 4 //espacios libres,
canceled: true //cancelado o no
},
],
pageInfo: {
hasNextPage: false,
endCursor: 1,
},
}
```
### GET mygames/{gameId}
##### Response
```
{
openGame: true | false,
status: 'PENDING' | 'ACCEPTED' | 'OWNER' | 'PAID' |
'DECLINED'| 'RESERVED',
id: 1,
name: "Cancha numero 1",
address: 'av ...',
playersId: 1, //palyer id
hours: [
{id: 1, price: 14, description: '8:00-9:00'},
{id: 2, price: 20, description: '9:00-10:00'}
],
images: [ 'imageUrl1', 'imageUrl2'],
liked: false,
dueTime: '19-09-2019 13:40',
date: '19-09-2019',
availableSpots: 4,
price: 12.4, //precio que se pago
goalkeeperPaysHalf: true,
splitPayment: true,
players: [
{
x: 0,
y: 1,
team: 1,
user: {
id: 1,
picture: 'url',
username: 'user',
firstName: 'Juan Carlos',
lastName: 'Jara'
}
}
],
usersInvited: [1, 2,3, 4], userIds,
groupsInvited: [{
id: 1,
members: [1,2,3,4]
}]
team1: {
color: 'blue',
name: 'team A'
},
team2: {
color: 'red',
name: 'teamB'
},
gender: 'M',
remainingPayment: 40 //lo que falta pagar
allPaid: true, //se pago todo o no
}
```
### POST /mygames/{gameId}/accept
### POST /mygames/{gameId}/decline
### PUT /mygames/{gameId}/invitations
```
{
inviteUsers: [1, 2, 3 ], //user ids
inviteGroups: [1 ,2, 3] // group ids,
openGame: true | false
}
```
### PUT /games/{gameId}/like
##### Request
```
{
liked: true/false
}
```
### PUT /games/{gameId}/soccerfield
##### Request
```
{
team1: {
color: '#FAFAFA',
name: 'Team A'
},
team2: {
color: '#BABABA',
name: 'Team B'
}
}
```
### POST /games/{gameId}/payAll
##### Request
```
{
useCoins: true | false,
cardId: '1234',
}
```
### POST /games/{gameId}/cancel
//puede retornar error si no se puede cancelar el juego