Skip to content

Commit 203739e

Browse files
committed
Merge branch 'master' into frontend
2 parents 0f22ecb + ce4be8e commit 203739e

File tree

10 files changed

+72
-11
lines changed

10 files changed

+72
-11
lines changed

Dockerfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM python:3.8.1
2+
3+
COPY . /opt/DatabasesProject/
4+
5+
WORKDIR /opt/DatabasesProject/
6+
7+
RUN pip install -r requirements.txt
8+
9+
10+
ENTRYPOINT ["python3", "main.py"]

Procfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
web: gunicorn main:app

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#How to start server
22
##1. Install docker
33
https://www.docker.com/get-started
4-
##2. Start database container
4+
##2. Start database and server container
55
###Run in cmd:
66
docker-compose up
7-
##3. Start server
8-
###Run in cmd:
9-
python main.py
7+
8+
##3. Connect to server
9+
###In browser use ip
10+
http://127.0.0.1:5000/
1011

1112
#Areas in which the pizzeria delivers
1213
-City centre

app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33

44
app = Flask(__name__)
55

6-
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://pizzeria-owner:n&jPrqRZL3r3sV7K@localhost:3307/pizzeria"
6+
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://pizzeria-owner:n&jPrqRZL3r3sV7K@pizzeria-db:3306/pizzeria"
7+
# app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://pizzeria-owner:n&jPrqRZL3r3sV7K@localhost:3307/pizzeria"
78
db = SQLAlchemy(app)

client/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ def setup():
5353
dwight_schrute = save_new_driver("Dwight", "Schrute", "Sphinx quarter")
5454
jim_halpert = save_new_driver("Jim", "Halpert", "Céramique")
5555
victor_htema = save_new_driver("Victor", "Htema", "Jeker quarter")
56-
francisca_van_dijk = save_new_driver("Britt", "Van Dijk", "Sint Pieter")
56+
francisca_van_dijk = save_new_driver("Francisca", "Van Dijk", "Sint Pieter")

docker-compose.yml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,31 @@ version: "3.7"
22

33
services:
44

5+
56
pizzeria-db:
67
container_name: pizzeria-db
78
image: mysql:latest
89
restart: always
10+
command: [ "--default-authentication-plugin=mysql_native_password" ]
911
volumes:
1012
- ./data/mysql:/var/lib/mysql
1113
env_file:
1214
- services/mysql/.env
1315
ports:
14-
- "3307:3306"
16+
- "3307:3306"
17+
18+
pizzeria-server:
19+
container_name: pizzeria-server
20+
build:
21+
context: .
22+
dockerfile: Dockerfile
23+
restart: always
24+
env_file:
25+
- services/mysql/.env
26+
ports:
27+
- "5000:5000"
28+
links:
29+
- "pizzeria-db"
30+
depends_on:
31+
- "pizzeria-db"
32+

main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,5 +211,5 @@ def remove_pizza():
211211

212212

213213
if __name__ == "__main__":
214-
app.run(debug=True)
214+
app.run(debug=True, host="0.0.0.0")
215215
# app.run()

models/mysql_model.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def save_new_pizza(name, ingredients):
3636
Ingredient(name=ingredient["name"], vegetarian=ingredient["vegetarian"], price=ingredient["price"]))
3737
calculated_price = calculated_price + 0.4 * calculated_price # 40% profit
3838
calculated_price = calculated_price + 0.09 * calculated_price # 9% VAT
39+
calculated_price = str(round(calculated_price, 2))
3940
new_pizza = Pizza(name=name, vegetarian=veg_flag, price=calculated_price, ingredients=ingredients_list)
4041
db.session.add(new_pizza)
4142
db.session.commit()
@@ -108,7 +109,10 @@ def show_ingredients(name):
108109

109110
def save_new_order(customer, order_items):
110111
new_order_items = []
111-
driver = get_first_available_driver()
112+
customer_address = customer["address"]
113+
customer_area = customer_address["area"]
114+
customer_zip_code = customer_address["zip_code"]
115+
driver = get_first_available_driver(customer_area, customer_zip_code)
112116
driver_id = driver.id
113117
driver.available = False
114118
address = customer["address"]
@@ -178,6 +182,7 @@ def driver_back():
178182
print("Driver Back")
179183
db.session.commit()
180184

185+
# TODO: Change the times
181186
scheduler.add_job(id='preparation-time-'f'{order_id}', func=change_status,
182187
trigger=DateTrigger(order_time + timedelta(minutes=0.1)))
183188
scheduler.add_job(id='delivery-time-'f'{order_id}', func=deliver,
@@ -198,11 +203,22 @@ def find_order(order_id):
198203
return order
199204

200205

206+
def find_address(address_id):
207+
address = Address.query.filter_by(id=address_id).first_or_404(
208+
description='There is no address with id {}'.format(address_id))
209+
return address
210+
211+
201212
def find_driver(driver_id):
202213
driver = Driver.query.filter_by(id=driver_id) \
203214
.first_or_404(description='There is no driver with id {}'.format(driver_id))
204215
return driver
205216

217+
def find_customer(customer_id):
218+
customer = Customer.query.filter_by(id=customer_id) \
219+
.first_or_404(description='There is no driver with id {}'.format(customer_id))
220+
return customer
221+
206222

207223
def cancel_order(order_id):
208224
order = find_order(order_id)
@@ -235,14 +251,27 @@ def are_there_available_drivers():
235251
return False
236252

237253

238-
def get_first_available_driver():
254+
def get_first_available_driver(area, zip_code):
239255
if are_there_available_drivers():
240256
drivers = db.session.query(Driver)
257+
orders = db.session.query(Order)
258+
current_time = datetime.now()
241259
for driver in drivers:
242-
if driver.available:
260+
if driver.available and driver.working_area == area:
243261
return driver
262+
else:
263+
if driver.working_area == area:
264+
for order in orders:
265+
customer = find_customer(order.customer_id)
266+
address = find_address(customer.address_id)
267+
if address.area == area and ((current_time - order.order_time).seconds / 60) < 1 and address.zip_code == zip_code:
268+
return driver
269+
270+
raise Exception("There are no available drivers for your area.")
244271
else:
245272
raise Exception("There are no available drivers.")
246273

247274

275+
276+
248277
db.create_all()

requirements.txt

642 Bytes
Binary file not shown.

services/mysql/.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
HOSTNAME=pizzeria-db
12
MYSQL_USER=pizzeria-owner
23
MYSQL_PASSWORD=n&jPrqRZL3r3sV7K
34
MYSQL_DATABASE=pizzeria

0 commit comments

Comments
 (0)