Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,6 @@ venv.bak/

# mypy
.mypy_cache/
.git.exe
.vscode
iReporterAPI2.exe
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# iReporterAPI
Corruption is a huge bane to Africa’s development. African countries must develop novel and localised solutions that will curb this menace, hence the birth of iReporter. iReporter enables any/every citizen to bring any form of corruption to the notice of appropriate authorities and the general public. Users can also report on things that needs government intervention
Corruption is a huge bane to Africa’s development. African countries must develop novel and localised solutions that will curb this menace, hence the birth of iReporter. iReporter enables any/every citizen to bring any form of corruption to the notice of appropriate authorities and the general public. Users can also report on things that needs government intervention. iReporter is an App that is aimed at solving this.
3 changes: 3 additions & 0 deletions api/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from flask import Flask
from api import routes
app = Flask(__name__)
33 changes: 33 additions & 0 deletions api/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from datetime import datetime

my_red_flags = []


class Redflag:

def __init__(self, createdBy, _type, place, status, Images, Videos, comment):

self._id = len(my_red_flags) + 1
self.createdOn = datetime.now()
self.createdBy = createdBy
self.type = _type
self.location = place
self.status = status
self.Images = Images
self.Videos = Videos
self.comment = comment

def format_record(self):

return {

"id": self._id,
"createdOn": self.createdOn,
"createdBy": self.createdBy,
"type": self.type,
"location": self.location,
"status": self.status,
"Images": self.Images,
"Videos": self.Videos,
"comment": self.comment
}
107 changes: 107 additions & 0 deletions api/routes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
from flask import Flask, jsonify, request
from api.models import Redflag, my_red_flags


app = Flask(__name__)

@app.route("/")
def hello_world():
return "Hello Kato"


#API end point to create a red-flag record
@app.route("/api/v1/red-flags", methods=["POST"])
def create_redflag():
if not request.json:
return jsonify({
"Error": "There is no data returned from the request",
"status": 400
}), 400
data = request.get_json()
if 'createdBy' not in data or 'comment' not in data or 'type' not in data or 'location' not in data or 'status' not in data:
return jsonify({'status': 400, 'Error': 'The information is missing'}), 400
red_flag = Redflag(
data["createdBy"], data["type"],
data["location"], data["status"], data["Images"],
data["Videos"], data["comment"]
)
my_red_flags.append(
red_flag.format_record()
)
if len(my_red_flags) == 0:
return jsonify({
"status": 400,
"Error": "Invalid request"
})
return jsonify({
"status": 201,
"data": [{
"id": red_flag._id,
"Message": "Created red-flag record"
}]}), 200



#API end point to fetch all records
@app.route("/api/v1/red-flags", methods=["GET"])
def get_all_red_flags():
if len(my_red_flags) > 0:
return jsonify({
"status": 200,
"data": [red_flag for red_flag in my_red_flags]
})
return jsonify({
"status": 400,
"Error": "There are no records"
})

#API end point to fetch a specific record
@app.route("/api/v1/red-flags/<int:flag_id>", methods=["GET"])
def get_a_redflag(flag_id):
red_flag_record= [red_flag for red_flag in my_red_flags if red_flag['id'] == flag_id]
if red_flag_record:
return jsonify({
"status": 200,
"redflag": red_flag_record
}), 200
return jsonify({
"status": 404,
"Error": " Invalid record"
})


# API end point to delete a specific record
@app.route("/api/v1/red-flags/<int:flag_id>", methods=["DELETE"])
def delete_red_flag(flag_id):
red_flag_record = [flag for flag in my_red_flags if flag['id'] == flag_id]
if len(my_red_flags) == 0:
return jsonify({
"status": "400",
"Error": "Invalid request"
})
my_red_flags.remove(red_flag_record[0])
return jsonify({
'result': True
}), 200






















4 changes: 4 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from api.routes import app

if __name__ == "__main__":
app.run(debug = True)
1 change: 1 addition & 0 deletions coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
repo_token: CjaAwOWxXj8kSfulofMGrBmaW7uBGCv58
6 changes: 6 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Click==7.0
Flask==1.0.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
Werkzeug==0.14.1