Giter Club home page Giter Club logo

go-amadeus-trip's Introduction

Trip Parser

This project illustrates the use of Amadeus Trip API to parse emails and extract travel information from it.

How does it work

The go process retrieve mails by polling a Gmail inbox and then process them using the Amadeus TRIP API, first by creating a parsing job, then by querying the status to eventually get the results.

Extracted travel information is stored into a SQLite3 database and made available through a REST API.

alt text

Requirements

You will need:

Configuration

Configure the application through a file

  • this file must be called config.(yaml|json) and put at the project root
  • a sample config.sample.yaml with dummy values is available, copy and rename it to config.yaml before editing

Or use environment variables (they take precedence over the configuration file)

Name Description Example
API_LISTEN server:port on which API listens :1323
PARSER_KEY Amadeus API key yRveyxreiof83ID2FlldsfgIW95
PARSER_SECRET Amadeus API secret d5Gtof7Q4pxlI8KGH
PARSER_URL Amadeus API endpoint https://test.api.amadeus.com
MAIL_CREDENTIALS GMail client credentials JSON file client_credentials.json
MAIL_TOKEN GMail token JSON file gmail_token.json
STORAGE_NAME SQLite database name :memory:

Running

Build and run it directly

$ make run

Or Build and run it as a docker image

$ make docker-build docker-run

Check logs in stdout to see if processing is going OK.

2:02PM DBG trip 95ed6a4c-3910-4bce-8f06-0d2b2ea1d344 (ref: UCFRMZ) written in repository

To check for results, query the API

$ curl "http://localhost:1323"
[{"ID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Reference":"UCFRMZ" .... }]

$ curl "http://localhost:1323/trip?ref=UCFRMZ"
{"ID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Reference":"UCFRMZ","Start":"0001-01-01T00:00:00Z","End":"0001-01-01T00:00:00Z","TripSteps":[{"ID":"1ef923bb-10af-44b7-8022-65c7aae805b3","TripID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Type":"flight-end","DateTime":"2020-04-12T15:30:00Z","Location":"PARIS","Description":"Flight end with TRANSAVIA FRANCE"},{"ID":"49c85155-4ad5-493e-973b-ec4a939b7a18","TripID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Type":"flight-start","DateTime":"2020-04-12T11:55:00Z","Location":"TUNIS","Description":"Flight start with TRANSAVIA FRANCE"},{"ID":"df9b3b22-e797-467c-9e71-7ee6d13bb787","TripID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Type":"flight-end","DateTime":"2020-04-06T17:45:00Z","Location":"TUNIS","Description":"Flight end with TRANSAVIA FRANCE"},{"ID":"ef983fa6-1222-4e2f-9315-9355895570a3","TripID":"95ed6a4c-3910-4bce-8f06-0d2b2ea1d344","Type":"flight-start","DateTime":"2020-04-06T16:10:00Z","Location":"PARIS","Description":"Flight start with TRANSAVIA FRANCE"}]}

Code

Code organization follows the Clean Architecture guidelines.

  • domain contains only models and interfaces
  • usecase contains application logic
  • adapter is for interface implementations and communication with external world
.
├── adapter
│   ├── api
│   │   ├── rest.go
│   │   └── rest_test.go
│   ├── backend
│   │   ├── mail
│   │   │   └── gmail
│   │   │       ├── gmail.go
│   │   │       └── gmail_test.go
│   │   └── parser
│   │       └── amadeus
│   │           ├── amadeus.go
│   │           ├── amadeus_test.go
│   │           ├── converter.go
│   │           ├── converter_test.go
│   │           ├── dto.go
│   │           ├── dto_test.go
│   │           └── testdata
│   │               ├── air.json
│   │               ├── hotel.json
│   │               └── msg-encoded
│   └── repository
│       ├── sqlite.go
│       └── sqlite_test.go
├── domain
│   ├── backend.go
│   ├── mocks
│   │   ├── TripFinder.go
│   │   └── TripRepository.go
│   ├── model
│   │   ├── email.go
│   │   └── trip.go
│   ├── repository.go
│   └── usecase.go
└── usecase
    ├── processor.go
    ├── tripfinder.go
    └── tripfinder_test.go

Dependencies

This project makes use of:

go-amadeus-trip's People

Contributors

esys avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  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.