No description
  • Vue 53%
  • Python 30.6%
  • TypeScript 8.7%
  • CSS 6.4%
  • Dockerfile 0.8%
  • Other 0.5%
Find a file
admin 0479a36206
All checks were successful
/ backend (push) Successful in 25s
Frontend / frontend (push) Successful in 18s
Release / release (push) Successful in 7m31s
migrate to https
2026-07-09 17:34:16 +02:00
.forgejo/workflows migrate to https 2026-07-09 17:34:16 +02:00
backend dockerize application 2026-07-09 16:59:14 +02:00
deploy dockerize application 2026-07-09 16:59:14 +02:00
frontend dockerize application 2026-07-09 16:59:14 +02:00
.gitignore fix pytest 2026-07-08 12:32:45 +02:00
docker-compose.yml complete property CRUD with PostgreSQL 2026-07-07 20:50:53 +02:00
README.md up 2026-07-09 13:44:18 +02:00

SCI Rental Manager

Application de gestion locative pour une SCI, auto-hébergeable via Docker et Traefik.


Objectifs

L'application permettra de gérer :

  • Les biens immobiliers
  • Les locataires
  • Les réservations
  • Les tarifs
  • Les contrats de location
  • Le planning des locations
  • L'historique des locataires

Types de réservation

Airbnb

  • Réservation enregistrée
  • Pas de contrat généré

Réservation directe

  • Réservation enregistrée
  • Contrat Word généré automatiquement
  • Historique conservé

Architecture

Vue 3
    │
    ▼
FastAPI
    │
    ▼
SQLAlchemy
    │
    ▼
PostgreSQL

Frontend

Vue 3
TypeScript
Vite

Responsabilités :

  • Affichage des données
  • Formulaires
  • Navigation
  • Appels API REST
  • Planning des réservations

Backend

FastAPI

Responsabilités :

  • API REST
  • Validation des données
  • Logique métier
  • Génération des contrats
  • Gestion des réservations

ORM

SQLAlchemy

Responsabilités :

  • Mapping Python ↔ PostgreSQL
  • Requêtes SQL
  • Persistance des données

Base de données

PostgreSQL

Responsabilités :

  • Stockage des données
  • Intégrité des données
  • Relations entre entités

Arborescence actuelle

sci-rental-manager/
│
├── backend/
│   │
│   ├── main.py
│   │
│   ├── database/
│   │   ├── __init__.py
│   │   ├── base.py
│   │   └── session.py
│   │
│   ├── models/
│   │   ├── __init__.py
│   │   ├── property.py
│   │   └── property_schema.py
│   │
│   └── routes/
│       ├── __init__.py
│       └── properties.py
│
├── frontend/
│   │
│   ├── src/
│   │   ├── api/
│   │   ├── components/
│   │   ├── types/
│   │   └── views/
│   │
│   ├── package.json
│   └── vite.config.ts
│
├── docs/
│
└── docker-compose.yml

Installation Backend

Création du virtualenv

python3 -m venv .venv

Activation :

source .venv/bin/activate

Installation FastAPI

pip install fastapi uvicorn

Installation SQLAlchemy + PostgreSQL

pip install sqlalchemy psycopg pydantic-settings

Vérification :

pip list | grep -E "sqlalchemy|psycopg"

Démarrer PostgreSQL

docker-compose.yml

services:
  db:
    image: postgres:16-alpine
    container_name: sci-rental-db

    environment:
      POSTGRES_DB: sci_rental
      POSTGRES_USER: sci_user
      POSTGRES_PASSWORD: sci_password

    ports:
      - "5432:5432"

    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Démarrage

docker compose up -d

Vérification :

docker ps

Création des tables SQLAlchemy

Depuis :

backend/

Lancer :

python3 -m database.session

Résultat attendu :

✅ tables créées

Démarrage du Backend

Depuis :

backend/
©

URLs :

API      : http://127.0.0.1:8000
Swagger  : http://127.0.0.1:8000/docs

Installation Frontend

Création du projet Vue 3

Depuis la racine :

npm create vite@latest frontend

Choix :

Vue
TypeScript

Installation des dépendances

cd frontend

npm install

Lancement

npm run dev

URL :

http://localhost:5173

Configuration CORS

Dans main.py :

from fastapi.middleware.cors import CORSMiddleware

Ajouter :

app.add_middleware(
    CORSMiddleware,
    allow_origins=[
        "http://localhost:5173"
    ],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

Architecture Frontend

frontend/
│
├── src/
│   ├── api/
│   │   └── properties.ts
│   │
│   ├── types/
│   │   └── property.ts
│   │
│   ├── views/
│   │   └── PropertiesView.vue
│   │
│   ├── components/
│   │
│   ├── App.vue
│   └── main.ts

Fonctionnalités implémentées

Property

CRUD PostgreSQL :

GET     /properties
GET     /properties/{id}
POST    /properties
PATCH   /properties/{id}
DELETE  /properties/{id}

Frontend :

Affichage des propriétés depuis PostgreSQL

Concepts découverts

Backend

  • FastAPI
  • Routers
  • Pydantic
  • SQLAlchemy
  • PostgreSQL
  • Sessions SQLAlchemy
  • CRUD REST

Frontend

  • Vue 3
  • TypeScript
  • Vite
  • Components
  • onMounted()
  • ref()
  • fetch()
  • CORS

Roadmap

Sprint 1

  • FastAPI
  • PostgreSQL
  • SQLAlchemy
  • Vue 3
  • Property CRUD
  • Affichage des propriétés

Sprint 2

  • Création de propriété depuis le frontend
  • Modification de propriété
  • Suppression de propriété
  • Composants Vue dédiés

Sprint 3

  • Tenant
  • CRUD Tenant
  • Historique locataire

Sprint 4

  • Booking
  • Réservations
  • Vérification anti-chevauchement

Sprint 5

  • Planning FullCalendar
  • Vue mois
  • Vue semaine

Sprint 6

  • Templates Word
  • Génération DOCX
  • Téléchargement des contrats

Commandes utiles

Backend

cd backend

uvicorn main:app --reload

Frontend

cd frontend

npm run dev

PostgreSQL

docker compose up -d
docker compose down
docker ps

Création des tables

cd backend

python3 -m database.session

Git

git status
git add .
git commit -m "message"

Architecture cible

Vue 3
    ↓
FastAPI
    ↓
SQLAlchemy
    ↓
PostgreSQL
    ↓
Docker
    ↓
Traefik

Objectif final :

  • Application self-hostable
  • Gestion des biens
  • Gestion des locataires
  • Gestion des réservations
  • Planning visuel
  • Génération des contrats
  • Déploiement Docker derrière Traefik