MegaSapiens / field

Birthplace of new ilicoins
Other
0 stars 0 forks source link

Серверная часть #2

Open STK-bot opened 1 month ago

STK-bot commented 1 month ago

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. Безопасность:

Аутентификация и авторизация:
Использовать надежные методы аутентификации и авторизации пользователей. Шифрование:
Шифровать передаваемую информацию для защиты данных пользователей. Проверка кода:
Регулярно проводить проверку кода на наличие уязвимостей.

STK-bot commented 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)