Start Projekty GlobalVista
Python Flask SQL Server MongoDB Azure Power BI

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.

2024 – 2025 ~6 miesięcy Praca inżynierska
M+ Wygenerowanych rekordów
4 Bazy danych
24 Obsługiwane kraje
7+ Endpointów REST API

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

01

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ść.

02

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.

03

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.

04

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.

05

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.

06

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)
app.py — Flask Backend
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'))