GlobalVista
System Zarządzania Sprzedażą
Kompleksowa aplikacja full-stack do zarządzania globalną sprzedażą — od generowania milionów realistycznych rekordów przez Faker (24 kraje), przez multi-bazodanowy backend (SQL Server + MongoDB + Azure SQL + Cosmos DB), po interaktywny dashboard z autoryzacją, panelem administracyjnym i wizualizacjami Power BI. Projekt realizowany jako praca inżynierska.
Multi-database backend
Jednoczesna obsługa SQL Server (lokalna baza), MongoDB, Azure SQL Database oraz Azure Cosmos DB — dane synchronizowane między źródłami.
System autoryzacji
Flask-Login z 3 rolami (admin, user, guest) i granularnym systemem uprawnień — hashowanie haseł, salt, tabela Users w Azure SQL.
Generator danych (Faker)
Realistyczne dane sprzedażowe dla 24 krajów z lokalizacją walut, adresów i telefonów — wielowątkowe generowanie setek tysięcy rekordów.
Power BI & Dashboard
Interaktywny panel webowy z Tailwind CSS + dedykowana strona Power BI z wizualizacjami strategii, prognoz i analiz detalicznych.
Integracja z Azure
CloudHandler łączący się z Azure SQL Database (global-vista.database.windows.net) oraz Azure Cosmos DB — dane w chmurze dostępne globalnie.
REST API
Flask backend z endpointami API dla klientów, sprzedawców, produktów, kategorii, krajów, regionów i zamówień — CRUD z obsługą błędów.
Cel projektu
Zaprojektowanie i implementacja kompleksowego systemu zarządzania sprzedażą dla fikcyjnej globalnej korporacji „GlobalVista". System miał demonstrować umiejętności projektowania baz danych, tworzenia aplikacji webowych, integracji chmurowej i wizualizacji danych.
Projekt realizowany jako praca inżynierska, łączący wiedzę z zakresu baz danych (relacyjnych i NoSQL), programowania backendowego w Python/Flask, frontend developmentu oraz usług chmurowych Microsoft Azure.
Architektura systemu
Warstwa danych — SQL Server
Główna baza danych SalesDB z tabelami: Countries, Regions, Sellers, Products, Categories, Customers, Orders, DateDimension. Relacje, indeksy i procedury składowane zapewniają wydajność.
Warstwa danych — MongoDB & Azure
MongoDB jako uzupełnienie dla danych niestrukturalnych. Azure SQL Database i Azure Cosmos DB zapewniają skalowalność i globalną dostępność danych.
Backend — Flask & REST API
Aplikacja Flask z modułami: app.py (routing), database_handler.py (SQL Server + MongoDB), cloud_handler.py (Azure), auth_handler.py (uwierzytelnianie). REST API z pełnym CRUD.
Generator danych — Faker
Skrypt generate_sales_data.py generujący realistyczne dane sprzedażowe dla 24 krajów — wielojęzyczność (Faker locales), wielowalutowość, adresacja i numery telefonów zgodne z regionem.
Frontend — Dashboard & Admin
Panel zarządzania (dashboard.html) z Tailwind CSS, panel administracyjny (admin.html) z zarządzaniem użytkownikami i uprawnieniami, strona Power BI z interaktywnymi wizualizacjami.
Autoryzacja i bezpieczeństwo
System logowania z Flask-Login, hashowanie haseł z solą (SHA-256), 3 role (admin, user, guest) z granularnym systemem uprawnień (read/write/delete/generate/sync/admin_panel).
Wyróżniki projektu
- 4 różne systemy bazodanowe zintegrowane w jednej aplikacji
- Realistyczne dane dla 24 krajów generowane przez Faker z lokalizacjami
- Pełny system RBAC (Role-Based Access Control) z 3 poziomami uprawnień
- Integracja z chmurą Azure (SQL Database + Cosmos DB)
- REST API z endpointami dla 7+ encji z obsługą CRUD
- Wizualizacje Power BI z interaktywnymi raportami i prognozami
- Thread-safe DatabaseHandler z mechanizmem blokad (threading.Lock)
from flask import Flask, render_template, jsonify, request
from flask_login import LoginManager, login_required
from database_handler import DatabaseHandler
from cloud_handler import CloudHandler
from auth_handler import AuthHandler
app = Flask(__name__)
db = DatabaseHandler()
cloud = CloudHandler()
auth = AuthHandler(cloud)
# Permissions decorator
def require_permission(permission):
def decorator(f):
@login_required
def wrapped(*args, **kwargs):
if not current_user.has_permission(permission):
return jsonify({"error": "Brak uprawnień"}), 403
return f(*args, **kwargs)
return wrapped
return decorator
# REST API endpoints
@app.route('/api/sql/customers')
@require_permission('read')
def get_customers():
return jsonify(db.get_all('Customers'))