Open STK-bot opened 1 month ago
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
import jwt
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/dbname'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password_hash = db.Column(db.String(120), nullable=False)
ilicoins = db.relationship('Ilicoin', backref='creator', lazy=True)
class Ilicoin(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
description = db.Column(db.Text, nullable=False)
creator_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
transactions = db.relationship('Transaction', backref='ilicoin', lazy=True)
class Transaction(db.Model):
id = db.Column(db.Integer, primary_key=True)
timestamp = db.Column(db.DateTime, nullable=False)
type = db.Column(db.String(50), nullable=False)
details = db.Column(db.Text, nullable=False)
ilicoin_id = db.Column(db.Integer, db.ForeignKey('ilicoin.id'), nullable=False)
def create_token(user):
return jwt.encode({'id': user.id}, app.secret_key, algorithm='HS256')
@app.route('/register', methods=['POST'])
def register():
data = request.json
if not data.get('username') or not data.get('password'):
return jsonify({'error': 'Missing required fields'}), 400
existing_user = User.query.filter_by(username=data['username']).first()
if existing_user:
return jsonify({'error': 'Username already exists'}), 400
new_user = User(username=data['username'], password_hash=generate_password_hash(data['password']))
db.session.add(new_user)
db.session.commit()
return jsonify({'message': 'User registered successfully'}), 201
@app.route('/login', methods=['POST'])
def login():
data = request.json
user = User.query.filter_by(username=data['username']).first()
if not user or not check_password_hash(user.password_hash, data['password']):
return jsonify({'error': 'Invalid credentials'}), 401
token = create_token(user)
return jsonify({'token': token.decode('UTF-8')}), 200
@app.route('/create-ilicoin', methods=['POST'])
def create_ilicoin():
data = request.json
if not data.get('name') or not data.get('description'):
return jsonify({'error': 'Missing required fields'}), 400
new_ilicoin = Ilicoin(name=data['name'], description=data['description'], creator_id=request.headers.get('Authorization').split()[1])
db.session.add(new_ilicoin)
db.session.commit()
return jsonify({'message': 'Ilicoin created successfully', 'id': new_ilicoin.id}), 201
@app.route('/get-ilicoin/<int:id>', methods=['GET'])
def get_ilicoin(id):
ilicoin = Ilicoin.query.get_or_404(id)
return jsonify({
'id': ilicoin.id,
'name': ilicoin.name,
'description': ilicoin.description,
'creator': ilicoin.creator.username
}), 200
@app.route('/transactions/<int:id>', methods=['GET'])
def get_transactions(id):
ilicoin = Ilicoin.query.get_or_404(id)
transactions = Transaction.query.filter_by(ilicoin_id=id).all()
return jsonify([{
'timestamp': t.timestamp.isoformat(),
'type': t.type,
'details': t.details
} for t in transactions]), 200
if __name__ == '__main__':
app.run(debug=True)
1. Серверная часть:
Язык программирования: Python с фреймворком Flask или Django, Node.js с Express.js, или Java с Spring Boot - все эти варианты хорошо подходят для создания API. База данных: PostgreSQL или MongoDB для хранения информации о пользователях, Ilicoins, транзакциях и истории создания монет. API: Разработать REST API для взаимодействия с серверной частью. API должен предоставлять следующие возможности: Регистрация/аутентификация пользователей:
Создание Ilicoins:
Получение уникального идентификатора для новой монеты. Хранение информации о создателе и характеристиках Ilicoin. Запись транзакции о создании Ilicoin в базе данных. Просмотр информации о Ilicoins:
Получение информации о конкретной Ilicoin (идентификатор, создатель, характеристики). История транзакций:
Просмотр истории транзакций для конкретного Ilicoin или пользователя.
2. Frontend:
HTML, CSS, JavaScript: Разработать веб-интерфейс для взаимодействия с API. Библиотеки/фреймворки: React, Vue.js или Angular для создания интерактивного интерфейса. Пользовательский опыт: Интуитивно понятное меню и навигация. Простой и понятный процесс создания Ilicoins. Визуализация информации о Ilicoins.
3. Дополнительные возможности:
API для разработчиков:
Позволить разработчикам интегрировать функционал создания Ilicoins в свои приложения. Блокчейн:
Использовать блокчейн для хранения информации о Ilicoins и транзакциях, повышая прозрачность и безопасность. Токенизация:
Ввести токенизацию, чтобы пользователи могли обменивать Ilicoins на другие криптовалюты или фиатные деньги.
4. Безопасность:
Аутентификация и авторизация:
Использовать надежные методы аутентификации и авторизации пользователей. Шифрование:
Шифровать передаваемую информацию для защиты данных пользователей. Проверка кода:
Регулярно проводить проверку кода на наличие уязвимостей.