la-chariotte/README.md
2023-08-14 08:39:43 +00:00

228 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 danomalies 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
}
```