Léa Courdès

Pipeline CI/CD d'une application Django

#Python

#PEP8

#flake8

#pytest

#Django

#ORM

#SQLite

#Gunicorn

#Docker

#GithubActions

#AWS

#EC2

#nginx

#Certbot

#Sentry

#Bash

Icone Github Lien Github

Description :
Ce projet (fictif) a pour objectif d'améliorer une application Django déjà existante de la start-up Orange County Letting qui opère dans le secteur de biens immobiliers.

Exigences :

  • Réductions de diverses dettes techniques.
  • Refonte de l'application pour proposer une architecture modulaire.
    • Diviser l'application originelle en trois applications distinctes.
    • Utiliser les migrations/requêtes SQL pour créer de nouvelles tables.
    • Remplir les nouvelles tables avec les données déjà existantes dans la base de données.
    • Développer la suite de tests en écrivant des tests unitaires pour chacune des vues.
  • Créer une Pipeline CI/CD et déployer l'application.
    • La pipeline est gérée par Github Action.
    • Un push sur n'importe quelle branche déclenche le linting (flake8) et des tests de non régression.
    • Un push sur la branche main démarre un travail de conteneurisation. Une image Docker de l'application est construite et est poussée vers un registre du Docker Hub
    • Après la conteneurisation, un push sur la branche main déclenche le déploiement. La mise en production est proposée sur une instance EC2 D'AWS. Nginx a été configuré sur l'instance et un certificat SSL est disponible pour l'application de sorte que le protocole HTTPS est géré.
  • Mettre en place un suivi des erreurs avec Sentry.

Architecturer et développer le back-end sécurisé d'une application de gestion de la relation client (CRM)

#Python

#PEP8

#Django

#Django REST

#ORM

#PostgreSQL

#PostMan

#DjangoCookie

#API

#DomainDrivenDesign

Icone Github Lien Github
Icone PostMan Lien de la documentation PostMan

Description :
Ce projet (fictif) a pour objectif de créer un système CRM interne à l'entreprise.

Exigences :

  • Créer un diagramme de classes de l'application selon une approche Domain Driven Design.
  • Fournir un ensemble de points de terminaison sécurisé pour l'API à l'aide du framework Django REST.
  • Les points de terminaison doivent être docummentés sur PostMan.
  • Utiliser une base de données PostgreSQL.
  • Définir des groupes de permissions pour les différentes équipes de travail.

Les permissions selon les membres d'équipes:

  • Les administrateurs utilise le site d'administration Django et peuvent ajouter de nouveaux utilisateurs au système CRM et leur attribuer des autorisations. Ils peuvent afficher et modifier toutes les données dans le système CRM.
  • Les membres de l'équipe de vente peuvent ajouter de nouveaux clients dans le système CRM à mesure qu'ils obtiennent des prospects. Ils peuvent garantir l'exactitude des informations relatives aux clients et les modifier au besoin (notamment pour les convertir en client existant). Ils peuvent créer de nouveaux contrats pour un nouvel événement potentiel. Ce contrat ouvert peut être considéré comme signé. Les utilisateurs peuvent créer un nouvel événement pour un contrat.
  • Les membres de l'équipe de support peuvent afficher et actualiser les informations relatives aux événements qui leur sont attribués. Ils peuvent afficher les informations du client relatives aux événements attribués. Ils peuvent actualiser les informations d'un événement jusqu'à ce qu'il soit terminé.

Création d'une API sécurisée RESTFUL avec Django REST

#Python

#PEP8

#Django

#Django REST

#ORM

#SQLite

#PostMan

#JSONWebToken

#OWASP

#Sentry

Icone Github Lien Github
Icone PostMan Lien de la documentation PostMan

Description :
Ce projet (fictif) a pour objectif de répondre à la demande d'une société d'édition de logiciels de développement et de collaboration qui a décidé de publier une application permettant de remonter et suivre des problèmes techniques (issue tracking system). Cette solution s’adresse à des entreprises clientes, en B2B.
L'application doit pouvoir exploiter les points de terminaison de l'API qui serviront les données. L'objectif est de créer cette API.

Exigences :

  • L'API REST doit être développée à l'aide du framework Django REST.
  • Les modèles de la base de données doivent suivre le diagramme de classes fourni par le CTO.
  • Diagramme de classes
  • Créer les routages pour chaque fonctionnalité selon le cahier des charges.
  • Chaque point de terminaison doit renvoyer une réponse de réussite 200 avec les données JSON fournissant tous les détails du sérialiseur.
  • Les points de terminaison doivent être docummentés sur PostMan.

Fonctionnalités attendues :

  • Les utilisateurs doivent pouvoir s'inscrire et s'authentifier.
  • Les utilisateurs doivent avoir accès aux actions CRUD sur des objets de type project.
  • Chaque projet peut se voir associer des problèmes (issues). L'utilisateur ne doit pouvoir appliquer le processus CRUD que s'il figure sur la liste des contributeurs du projet.
  • Les problèmes peuvent faire l'objet de commentaires (comments) de la part des contributeurs au projet auquel ces problèmes appartiennent.
  • Il est interdit à tout collaborateur d'un projet autre que l'auteur d'effectuer des requêtes d'actualisation ou de suppression d'un projet/problème/commentaire.

Mesures de sécurité OWASP :

  • Les JSON Web Tokens doivent être utilisés pour le back-end d'authentification.
  • Un utilisateur doit toujours être authentifié pour accéder à une fonctionnalité.
  • Un utilisateur ne doit pas être autorisé à accéder à un projet pour lequel il n'est pas un collaborateur.
  • Chaque ressource nécessite des autorisations spéciales pour les actions d'actualisation et de suppression accessibles uniquement aux auteurs des dites ressources.

Application Django modularisée

#Python

#PEP8

#Django

#ORM

#SQLite

#HTML

#CSS

Icone Github Lien Github

Description :
Ce projet (fictif) a pour objectif de répondre à la demande de MVP de la startup LITReview qui souhaite commercialiser un produit permettant à une communauté d'utilisateurs de consulter ou de solliciter une critique de livres à la demande.
L'application doit permettre de demander des critiques de livres ou d'articles en créant un ticket, mais également de publier des critiques de livres ou d'articles.

Exigences :

  • La disposition doit suivre la proposition des wireframes proposées.
  • L'interface doit restée propre et minimale.
  • Un utilisateur doit pouvoir :
    • se connecter et s'inscrire. Le site ne doit pas être accessible à un utilisateur non connecté ;
    • consulter un flux contenant les derniers tickets et les commentaires des utilisateurs qu'il suit, classés par ordre chronologique, les plus récents en premier ;
    • créer de nouveaux tickets pour demander une critique sur un livre/article ;
    • créer des critiques qui ne sont pas en réponse à un ticket. Dans le cadre d'un processus en une étape, l'utilisateur créera un ticket puis un commentaire en réponse à son propre ticket ;
    • voir, modifier et supprimer ses propres tickets et commentaires ;
    • suivre les autres utilisateurs ;
    • voir qui il suit et suivre qui il veut ;
    • cesser de suivre un utilisateur.

Aperçu de l'interface utilisateur :

Interface front pour une application Django de streaming vidéo

#JavascriptVanilla

#HTML

#CSS

Icone Github Lien Github

Description :
L’association (fictive) JustStreamIt est connue pour ses newsletters de classement de films. Ces classements ont sauvé bien des soirées à ses abonnés toujours plus nombreux, comme le dit leur slogan : “Tu ne sais pas quoi regarder pour passer une bonne soirée ? Alors JustStreamIt”.
L’association souhaite se doter d’une application web permettant de visualiser en temps réel un classement de films intéressants.

Exigences :

  • Récupérer les données des films de l'API à l'aide de requêtes ajax.
  • L'interface doit comprendre plusieurs zones :
    • Meilleur film : Cette zone affiche la photo du film qui a la meilleur note Imdb toutes catégories confondues, ainsi que son titre, un bouton et le résumé du film sous le bouton.
    • Films les mieux notés : Cette zone affiche les 7 autres films les mieux notés toutes catégories confondues. On pourra les faire défiler avec une flèche à gauche et à droite comme sur la maquette pour tous les parcourir.
    • Catégorie 1 : Montre les 7 films les mieux notés d’une catégorie donnée.
    • Catégorie 2 : Montre les 7 films les mieux notés d’une autre catégorie.
    • Catégorie 3 : Montre les 7 films les mieux notés d’une autre catégorie.
  • La disposition doit suivre la proposition des wireframes proposées.
  • Maquette de design
  • Lorsque l'on clique sur le bouton du film vedette ou sur l'image d'un des films une fenêtre modale s'ouvre. Dans cette fenêtre, les métadonnées du film doivent être présentes.
  • Utiliser Vanilla Javascript pour gérer les événements de la page web.

Aperçu :

Débugger et tester une application

#Python

#Flask

#TestDrivenDevelopment

#pytest

#coverage

#selenium

#locust

Icone Github Lien Github

Description :
L'application est un POC permettant à des clubs sportifs locaux de pouvoir inscrire des membres à des compétitions. Au début du projet, l'application présente divers bogues.

Exigences :

  • Résoudre un certain nombre de bogues de l'application.
  • Créer des tests unitaires pour l'application en suivant une approche Test Driven Development (pytest)
  • Créer des tests fonctionnels en utilisant selenium permettant de recréer des parcours utilisateur.
  • La couverture de code doit être d'au moins 60 %. Ceci doit être vérifié avec coverage.
  • Utiliser locust pour effectuer des tests de performance et s'assurer que le temps de chargement et des mises à jour n'excède jamais 5 secondes.

Aperçu :

Résoudre des problèmes en utilisant des algorithmes en Python

#Python

#KnapsackProblem

#AlgorithmeGlouton

#ProgrammationDynamique

#NotationBig-O

Icone Github Lien Github

Description :
Le but de ce projet est de concevoir un algorithme qui maximise le profit de clients après deux ans d'investissement dans des actions. L'algorithme doit suggérer une liste des actions les plus rentables. Fondamentalement, il s'agit de développer un algorithme relatif au problème du sac à dos.

Exigences :

  • Développer un algorithme de force brute qui doit tester toutes les différentes combinaisons d'actions avant de proposer le meilleur investissement.
  • Développer un algorithme optimisé qui n'a pas besoin d'explorer toutes les possibilités pour proposer un investissement. Dans le cadre de ce projet, j'ai développé deux algorithmes :
    • Un algorithme de type glouton qui permet une meilleure optimisation de la mémoire O(N) mais présente une efficacité limité sur un nombre de données important O(N log N).
    • Un algorithme utilisant la programmation dynamique moins efficace en termes de mémoire O(2N x Investissement maximum autorisé) mais plus efficace sur de grands datasets O(N x Investissement maximum autorisé).
  • Proposer une comparaison des algorithmes en utilisant la notation Big-O.
  • Comparer les résultats obtenus grâce aux algorithmes avec les résultats obtenus par une collègue.

Le détail du fonctionnement des algorithmes est expliqué dans ce document.

Aperçu :