-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
60 lines (49 loc) · 1.93 KB
/
app.py
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
from flask import Flask, jsonify, request
from uuid import uuid4
app = Flask(__name__)
books = {}
@app.route('/books', methods=['POST'])
def create_book():
book_id = str(uuid4())
name = request.json.get('name')
if not name:
return 'Nome do livro é obrigatório', 400
books[book_id] = {'id': book_id, 'name': name, 'paragraphs': []}
return jsonify({'book_id': book_id}), 201
@app.route('/books/<book_id>/paragraphs', methods=['POST'])
def create_paragraph(book_id):
book = books.get(book_id)
if not book:
return 'Livro não encontrado', 404
paragraph_id = str(uuid4())
text = request.json.get('text')
if not text or len(text) > 300:
return 'Texto inválido', 400
position = request.json.get('position')
if not position:
return 'Posição é obrigatória', 400
paragraph = {'id': paragraph_id, 'text': text, 'votes': 0, 'position': position}
book['paragraphs'].append(paragraph)
return jsonify({'paragraph_id': paragraph_id}), 201
@app.route('/paragraphs/<paragraph_id>/votes', methods=['POST'])
def vote(paragraph_id):
for book in books.values():
for paragraph in book['paragraphs']:
if paragraph['id'] == paragraph_id:
paragraph['votes'] += 1
return jsonify({'votes': paragraph['votes']}), 200
return 'Parágrafo não encontrado', 404
@app.route('/books/<book_id>', methods=['GET'])
def list_book(book_id):
book = books.get(book_id)
if not book:
return 'Livro não encontrado', 404
result = {}
for p in book['paragraphs']:
if p['position'] not in result:
result[p['position']] = p
else:
if p['votes'] > result[p['position']]['votes']:
result[p['position']] = p
filtered_paragraphs = [result[key] for key in sorted(result.keys())]
return jsonify({'name': book['name'], 'paragraphs': filtered_paragraphs})