degtyarev_mikhail_lab_3 is ready #163

Open
m_deg wants to merge 1 commits from degtyarev_mikhail_lab_3 into main
10 changed files with 250 additions and 0 deletions

View File

@ -0,0 +1,6 @@
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
CMD ["gunicorn", "--bind", "0.0.0.0:5001", "category_service:app"]

View File

@ -0,0 +1,87 @@
# category_service.py
import json
import time
from flask import Flask, request, jsonify
app = Flask(__name__)
categories = []
@app.route('/event', methods=['POST'])
def event():
data = request.get_json()
print(data)
input_category_id = data.get('category_id')
if data['action'] == 'create':
category = next((category for category in categories if category['id'] == input_category_id), None)
if category:
post_id = len(category.get('posts', [])) + 1
post = {'id': post_id, 'post': data['post']}
category.setdefault('posts', []).append(post)
print(f"Post created for category_id {input_category_id}: {post}")
else:
print(f"Category not found for post creation: {input_category_id}")
elif data['action'] == 'update':
category = next((category for category in categories if category['id'] == input_category_id), None)
if category:
post_id = data.get('id')
post = next((p for p in category['posts'] if p['id'] == post_id), None)
if post:
post['post'] = data['post']
print(f"Post updated for category_id {input_category_id}: {post}")
else:
print(f"Post not found for update: {post_id}")
else:
print(f"Category not found for post update: {input_category_id}")
elif data['action'] == 'delete':
category = next((category for category in categories if category['id'] == input_category_id), None)
if category:
post_id = category.get('id')
category['posts'] = [p for p in category.get('posts', []) if p['id'] != post_id]
print(f"Post deleted for category_id {input_category_id}: {post_id}")
else:
print(f"Category not found for post deletion: {input_category_id}")
return jsonify({'result': True})
@app.route('/', methods=['GET'])
def show_categories():
return jsonify(categories)
@app.route('/add/<string:name>', methods=['POST'])
def create_category(name):
if request.method == 'POST':
if len(categories) == 0:
id = 1
else:
id = categories[-1]['id'] + 1
category = {'id': id, 'name': name}
categories.append(category)
return jsonify(category)
@app.route('/get/<int:id>', methods=['GET'])
def get_category(id):
found_category = next((category for category in categories if category['id'] == id), None)
if found_category:
return jsonify(found_category)
else:
return jsonify({'error': 'Category not found'})
@app.route('/upd/<int:id>_<string:name>', methods=['PUT'])
def update_category(id, name):
category = next((category for category in categories if category['id'] == id), None)
if category:
category['name'] = name
return jsonify(category)
else:
return jsonify({'error': 'Category not found'})
@app.route('/del/<int:id>', methods=['DELETE'])
def delete_category(id):
global categories
categories = [category for category in categories if category['id'] != id]
return jsonify({'result': True})
if __name__ == '__main__':
app.run(port=5001)

View File

@ -0,0 +1,3 @@
Flask==3.0.0
requests==2.31.0
gunicorn==21.2.0

View File

@ -0,0 +1,37 @@
version: '3.8'
services:
category-service:
build:
context: ./category_service
ports:
- "5001:5001"
networks:
- app
restart: always
post-service:
build:
context: ./post_service
ports:
- "5002:5002"
networks:
- app
restart: always
nginx:
image: nginx:latest
ports:
- "80:80"
depends_on:
- category-service
- post-service
networks:
- app
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
restart: always
networks:
app:
driver: bridge

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,4 @@
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

View File

@ -0,0 +1,27 @@
events {
worker_connections 1024;
}
http {
server {
listen 80;
listen [::]:80;
server_name localhost;
location /category-service/ {
proxy_pass http://category-service:5001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /post-service/ {
proxy_pass http://post-service:5002/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

View File

@ -0,0 +1,6 @@
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
CMD ["gunicorn", "--bind", "0.0.0.0:5002", "post_service:app"]

View File

@ -0,0 +1,77 @@
from json import dump
from flask import Flask, request, jsonify
import requests
app = Flask(__name__)
posts = []
@app.route('/all', methods=['GET'])
def show_posts():
return jsonify(posts)
@app.route('/add/<int:category_id>_<string:post>', methods=['POST'])
def create_post(category_id, post):
new_post = {
'id': len(posts) + 1,
'category_id': category_id,
'post': post,
'action': 'create'
}
posts.append(new_post)
response = requests.post("http://category-service:5001/event", json=new_post)
if response.status_code == 200:
return jsonify(new_post)
else:
return jsonify({'error': 'Failed to create post'})
@app.route('/upd/<int:post_id>/<string:new_post>', methods=['PUT'])
def update_post(post_id, new_post):
post = next((p for p in posts if p.get('id') == post_id), None)
if post:
post['post'] = new_post
post['action'] = 'update'
response = requests.post("http://category-service:5001/event", json=post)
if response.status_code == 200:
return jsonify({'message': 'Post updated successfully'})
else:
return jsonify({'error': 'Failed to update post'})
else:
return jsonify({'error': 'Post not found'})
@app.route('/get/<int:post_id>', methods=['GET'])
def get_post(post_id):
found_post = next((p for p in posts if p.get('id') == post_id), None)
if found_post:
read_post = {'id': found_post['id'],
'category_id': found_post['category_id'],
'post': found_post['post']}
return jsonify(read_post)
else:
return jsonify({'error': 'Post not found'})
@app.route('/post/del_<int:post_id>', methods=['DELETE'])
def delete_post(post_id):
global posts
deleted_post = next((p for p in posts if p.get('id') == post_id), None)
if deleted_post:
posts = [p for p in posts if p.get('id') != post_id]
deleted_post['action'] = 'delete'
response = requests.post("http://category-service:5001/event", json=deleted_post)
if response.status_code == 200:
return jsonify({'result': True})
else:
return jsonify({'error': 'Failed to delete post'})
else:
return jsonify({'error': 'Post not found'})
if __name__ == '__main__':
app.run(port=5002)

View File

@ -0,0 +1,3 @@
Flask==3.0.0
requests==2.31.0
gunicorn==21.2.0