GithubHelp home page GithubHelp logo

bcm-interview's Introduction

Agrégation des données de production de centrales

Architecture

Main

Ce fichier est la classe point d'entrée du programme, son unique but est de parser les paramètres, de fournir les usages (non implémenté) et d'appeler le point d'entrée (appelé ici Resource.

Domain

Ce package contient les règles métier liées à l'agrégation:

  • définition du use case: l'agrégation entre 2 dates
  • la représentation d'une liste agrégée :
    • somme des différentes valeurs (non implémenté)
    • création de valeurs moyennes pour les données manquantes

Infra primaire

Ce package contient les points d'entrées pour l'extérieur, dans notre cas il n'y en a qu'un seul: PowerPlantProductionResource dont le but est d'appeler le UseCase et de sérialiser son résultat.

Le seul format de sortie implémenté est json, pour implémenter csv deux choix peuvent s'offrir:

  • ajouter un serializer csv dans la resource existante
  • créer une nouvelle resource par format

Si le nombre de format est voué à augmenter, la seconde serait à privilégier.

Infra secondaire

Ce package gère la communication avec les API des différentes centrales. Pour chaque centrale, on trouve :

  • XxxPowerPlant qui gère l'appel de la resource externe
  • XxxProduction représentant les données attendues et utilisé pour la déserialization
  • une fonction dans ProductionConverter qui convertit en PowerPlantProduction, la représentation unique du domain

Limitations :

  • Seul Hawes est actuellement disponible
  • Il n'y a aucune gestion au niveau des exceptions renvoyées par l'appel externe : il faudrait mettre en place une politique de rejeu (avec par exemple: retry4j)

Lancer le programme

Configurer l'environnement

Il faut d'abord configurer les variables d'environnement JAVA_HOME et M2_HOME:

  • JAVA_HOME représente le dossier racine de la version 17 du JDK (contenant /bin)
  • M2_HOME représente de dossier .m2 où se trouve les dépendances gérées par maven

Compiler le projet

Avec maven:

mvn clean package

Lancer le programme

${JAVA_HOME}/bin/java \
  -Dfile.encoding=UTF-8 \
  -classpath target/classes:${M2_HOME}/repository/com/fasterxml/jackson/core/jackson-core/2.13.2/jackson-core-2.13.2.jar:${M2_HOME}/repository/com/fasterxml/jackson/core/jackson-databind/2.13.2.2/jackson-databind-2.13.2.2.jar:${M2_HOME}/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.2/jackson-annotations-2.13.2.jar:${M2_HOME}/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.13.2/jackson-datatype-jsr310-2.13.2.jar:${M2_HOME}/repository/org/assertj/assertj-core/3.21.0/assertj-core-3.21.0.jar \
  Main \
  01-01-2020 02-01-2020 json

bcm-interview's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.