-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.py
More file actions
160 lines (121 loc) · 4.12 KB
/
api.py
File metadata and controls
160 lines (121 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# coding=utf-8
import os
from flask import Flask, jsonify, request
from pymongo import MongoClient
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__)
print(os.environ.get('mongo_url_con'))
# conexión a la bd
client = MongoClient(os.environ.get('mongo_url_con'))
db = client['onepiece']
# collections
collSets = db['sets']
collCards = db['cards']
@app.route('/')
def root():
return 'hola :)'
@app.route('/hola_mundo')
def holaMundo():
return 'hola mundo'
@app.route('/sets')
def get_sets():
try:
# Consulta a la bd - nos trae todos los registros de la colección sets
results = collSets.find({}, {'_id': False})
# variable para guardar los resultados
data = []
for result in results:
data.append(result)
response = jsonify({
'success' : True,
'entries' : len(data),
'data' : data
})
except Exception as e:
print(e)
response = jsonify({
'success': False,
'msg' : 'Ocurrió un error al obtener la información'
})
response.status_code = 500
return response
@app.route('/set/<id_set>')
def get_cards_by_set(id_set):
# validamos que el parámetro recibido sea de tipo entero, en caso de que no sea así se devuelve mensaje de error
try:
int(id_set)
except ValueError:
response = jsonify({
'success' : False,
'msg' : 'Parámetro no válido'
})
response.status_code = 400
return response
# Consulta a la base de datos para obtener los datos del set (expansión)
resultSet = collSets.find_one({'id': int(id_set)})
# Consulta a la base de datos para obtener todas las cartas que pertenecen a la expansión
results = collCards.find({'set_id' : int(id_set)}, {'_id': False})
# variable para guardar los resultados
data = []
for result in results:
data.append(result)
response = jsonify({
'success' : True,
'entries' : len(data),
'data' : data,
'set_id' : id_set,
'set_name' : resultSet['name']
})
return response
@app.route('/cards')
def get_cards():
try:
qstring = request.args.get('qstring', type = str)
rarity = request.args.get('rarity', type = str)
card_type = request.args.get('card_type', type = str)
# si no se recibió ningún filtro se envía mensaje de error
if(not qstring and not rarity and not card_type):
return jsonify({
'success' : False,
'msg' : 'Por lo menos un parámetro es requerido: qstring, rarity o card_type'
}), 400
# variables para los filtros
qparams = {}
qparams_and = []
# llenar los parámetros de búsqueda
if(qstring):
search_name_effect_trigger = [
{'name' : {'$regex' : qstring, '$options' : 'i'}},
{'effect' : {'$regex' : qstring, '$options' : 'i'}},
{'trigger' : {'$regex' : qstring, '$options' : 'i'}},
]
qparams['$or'] = search_name_effect_trigger
if(rarity):
qparams_and.append({'rarity' : rarity})
if(card_type):
qparams_and.append({'card_type' : card_type})
if(len(qparams_and) > 0):
qparams['$and'] = qparams_and
print(qparams)
# Realizar la consulta a la bd
results = collCards.find(qparams, {'_id': False})
# variable para guardar nuestros datos
data = []
for result in results:
data.append(result)
return jsonify({
'success' : True,
'data' : data,
'entries' : len(data)
})
except Exception as e:
print(e)
return jsonify({
'success' : False,
'msg' : 'Ocurrió un error interno al consultar la Info'
}), 500
if os.environ.get('ENV') == 'dev' :
app.run(debug = True, host = os.environ.get('HOST'), port = os.environ.get('PORT'))
else:
app.run()