mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-04-30 19:02:38 +02:00
228 lines
6.2 KiB
Markdown
228 lines
6.2 KiB
Markdown
# La Chariotte | 1.0.0
|
||
|
||
## Présentation
|
||
|
||
<img src="la_chariotte/static/img/logos/logo_la_chariotte.png" title="logo la Chariotte" height="150"/>
|
||
|
||
La Chariotte est une application web sous licence libre Affero GPL, développée et maintenue par [Hashbang](https://hashbang.fr/).
|
||
|
||
## Contribuer
|
||
|
||
Si vous souhaitez contribuer au projet de la Chariotte, merci beaucoup !
|
||
|
||
Pour cela, une fois que vous avez cloné le projet et obtenu le statut de développeur sur le projet GitLab, vous pouvez :
|
||
|
||
- choisir une tâche dans le board que vous voulez réaliser, et vous l'assigner - si vous ne savez pas quelle tâche faire, n'hésitez pas à écrire à laetitia@chariotte.fr
|
||
- créer une nouvelle branche **à partir de develop** dont le nom dira ce que vous voulez faire
|
||
- réaliser la tâche, sans oublier d'écrire et de lancer les tests (voir plus bas)
|
||
- créer une Merge Request, contenant le plus de détails possible sur ce que vous avez fait
|
||
|
||
Ensuite, un mainteneur de la Chariotte pourra relire votre code et proposer des améliorations/poser des questions si nécessaire. Seuls les mainteneurs peuvent merger dans develop et main.
|
||
|
||
Encore merci, et bon code !
|
||
|
||
## Versions - semantic versionning
|
||
|
||
Les fonctionnalités développées dans les différentes versions sont listées dans le fichier [CHANGELOG.md](https://gitlab.com/hashbangfr/la_chariotte/-/blob/main/CHANGELOG.md).
|
||
|
||
Étant donné un numéro de version MAJEUR.MINEUR.CORRECTIF, il faut incrémenter :
|
||
|
||
le numéro de version MAJEUR quand il y a des changements non rétrocompatibles,
|
||
le numéro de version MINEUR quand il y a des ajouts de fonctionnalités rétrocompatibles,
|
||
le numéro de version de CORRECTIF quand il y a des corrections d’anomalies rétrocompatibles.
|
||
|
||
La version est à mettre à jour dans le CHANGELOG, README, dans le pyproject.toml, dans le footer (base.html), seulement lorsque develop est mergé dans main.
|
||
|
||
## Développement
|
||
|
||
Cloner le projet :
|
||
```bash
|
||
git clone https://gitlab.com/hashbangfr/la_chariotte.git
|
||
```
|
||
|
||
Installer les dépendances :
|
||
```bash
|
||
pip install -r requirements.txt
|
||
pip install -r dev-requirements.txt
|
||
```
|
||
|
||
### Installation d'un environnement virtuel
|
||
|
||
Pour éviter que les bibliothèques nécessaires au projet ne rentrent en conflit avec celles de votre système, il peut être utile d'installer un environnement virtuel :
|
||
|
||
```bash
|
||
python3 -m venv .venv
|
||
```
|
||
|
||
Une fois l'environnement virtuel installé, vous pouvez l'activer :
|
||
|
||
```bash
|
||
source .venv/bin/activate
|
||
```
|
||
|
||
### Installation de la base de données
|
||
|
||
La Chariotte nécessite une base de données, et est actuellement compatible avec PostgreSQL ([instructions d'installation ici](https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart)).
|
||
|
||
Pour le développement, nous vous conseillons de créer une base de données nommée ```chariotte``` accessible par l'utilisateur et le mot de passe du même nom.
|
||
|
||
```SQL
|
||
CREATE ROLE chariotte WITH
|
||
LOGIN
|
||
NOSUPERUSER
|
||
CREATEDB
|
||
NOCREATEROLE
|
||
INHERIT
|
||
NOREPLICATION
|
||
CONNECTION LIMIT -1
|
||
PASSWORD 'xxxxxx';
|
||
```
|
||
```SQL
|
||
CREATE DATABASE chariotte
|
||
WITH
|
||
OWNER = chariotte
|
||
ENCODING = 'UTF8'
|
||
CONNECTION LIMIT = -1
|
||
IS_TEMPLATE = False;
|
||
```
|
||
|
||
### Création du fichier de configuration
|
||
|
||
Créez un fichier de configuration dans lequel vous pourrez spécifier la configuration qui est utile pour vous. Nous allons le nommer ici ```local_settings.py```.
|
||
|
||
```python
|
||
from la_chariotte.settings import *
|
||
|
||
DATABASES = {
|
||
'default': {
|
||
'ENGINE': 'django.db.backends.postgresql',
|
||
'NAME': 'chariotte',
|
||
'USER': 'chariotte',
|
||
'PASSWORD': 'chariotte',
|
||
'HOST': 'localhost',
|
||
}
|
||
}
|
||
```
|
||
|
||
### Lancement du serveur
|
||
|
||
Tout devrait être maintenant prêt pour pouvoir lancer le serveur :
|
||
|
||
```shell
|
||
python manage.py runserver --settings=local_settings
|
||
```
|
||
|
||
Pour créer un superutilisateur, qui aura accès à l'interface admin (/admin) :
|
||
```shell
|
||
python manage.py createsuperuser
|
||
```
|
||
|
||
|
||
### Travailler sur le frontend
|
||
|
||
install bulma
|
||
```bash
|
||
npm install bulma
|
||
```
|
||
|
||
check sass version
|
||
```bash
|
||
sass --version
|
||
# used for developement: 1.59.3 compiled with dart2js 2.19.4
|
||
```
|
||
|
||
watch for changes when updating scss files (from project root)
|
||
```bash
|
||
sass --watch --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css
|
||
```
|
||
|
||
OR compile css only once (from project root)
|
||
```bash
|
||
sass --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css
|
||
```
|
||
|
||
### Lancer les tests
|
||
|
||
Lancer les tests avec pytest :
|
||
```bash
|
||
pytest
|
||
```
|
||
|
||
Si il y a des erreurs ISORT, on peut lancer isort pour trier les fichiers :
|
||
```bash
|
||
isort .
|
||
```
|
||
|
||
Si il y a des erreurs BLACK, on peut lancer black pour linter le code :
|
||
```bash
|
||
black .
|
||
```
|
||
|
||
## Tests de l'envoi de mails
|
||
|
||
Pour tester l'apparence des mails, on peut utiliser Sendria :
|
||
```bash
|
||
pip install sendria
|
||
sendria --db mails.sqlite
|
||
$NAVIGATOR http://127.0.0.1:1080
|
||
```
|
||
|
||
## Architecture de l'application
|
||
|
||
Les différentes applications Django créées sont :
|
||
|
||
- ``order``, pour gérer tout ce qui tourne autour des commandes
|
||
- ``accounts``, pour gérer la création de comptes. Pour la connexion, la déconnexion et le changement de mot de passe, on utilise l'application auth intégrée à Django.
|
||
- ``mail``, pour l'envoi des mails.
|
||
|
||
A l'état actuel, le diagramme de classes est le suivant :
|
||
|
||
```mermaid
|
||
classDiagram
|
||
GroupedOrder "item_set" <-- Item
|
||
GroupedOrder "order_set" <-- Order
|
||
Order "ordered_items" <-- OrderedItem
|
||
Item "orders" <-- OrderedItem
|
||
OrderAuthor "author" <-- Order
|
||
CustomUser "grouped_orders" <-- GroupedOrder
|
||
|
||
class GroupedOrder{
|
||
name
|
||
deadline : DateTime
|
||
delivery_date : Date
|
||
place
|
||
description
|
||
orga : CustomUser
|
||
total_price
|
||
}
|
||
class Item{
|
||
name
|
||
grouped_order : GroupedOrder
|
||
ordered_nb
|
||
total_price
|
||
max_limit
|
||
}
|
||
class Order{
|
||
grouped_order : GroupedOrder
|
||
author : OrderAuthor
|
||
price
|
||
created_date
|
||
note
|
||
}
|
||
class OrderedItem{
|
||
order : Order
|
||
nb
|
||
item : Item
|
||
}
|
||
class OrderAuthor {
|
||
first_name
|
||
last_name
|
||
phone
|
||
email
|
||
}
|
||
class CustomUser{
|
||
first_name
|
||
last_name
|
||
email
|
||
}
|
||
```
|