I worked on the Travelodge Project when I spent 3 months as Senior Drupal Consultant in Watford Junction for an Award Winning Digital Agency Salmon Ltd. They are very big company and they are specialised in implementing .NET solutions and e-commerce web sites. This was a rare PHP / Symfony / Drupal 7 project from their end for a very famous hotels chain.
In facts with Travelodge you can search and book over 560 hotels throughout the UK and Ireland. Enjoy upgraded rooms with comfy king size beds.
My office location was in Watford Junction and I was working on this project with a team of other 20 people, 10 PHP Developers, 1 Project Manager, 2 Testers, 2 front end developers. Agile Sprint development, daily stand ups, estimation, planning and allocation of tasks, deadline management and retrospective.
The hotel search was built in Synfony and the data was stored in both Drupal and Mongo DB. I worked mostly on the Drupal Custom CMS. The admin screens were synchronising all the Drupal Entities form the MySQL data base into the Mongo DB. For this purpose I used the contributed module: mongodb.
I used extensively this MongoDB contributed module for its Drupal-standard API to access all features in the MongoDB library using database-style aliases, also for the abstraction provided by all Symfony factory services to access all MongoDB instances available in a very similar way we're used to do with the standard Drupal SQL databases.
I wrote 7 custom modules to move the hotel data from the raw Entities stored in the original MySQL DB to the new data structure stored in MongoDB having all normalised and clean data for: 1.facilities, 2.hotel locations, 3.opening hours, availabilities, 4.categories, number of guests, number of rooms, 5.check-in and check-out time, 6.prices and 7.vouchers and offers.
The main challenge I had was that traditionally Im used a lot to use MySQL as it stores its data in tables and uses the structured query language (SQL) to access the data.. But in MongoDB data is stored in JSON-like documents that can have varied structures and I had to map all Hotels related Drupal entities into a MongoDB model that has a structure easy enough to be quickly accessible by the Symfony application.
This module also implements the PSR-3, it had the great advantage to have a dedicated MongoDB-only logger system for our special situation.
In all our Drupal and Symfony coding we followed the PSR-4 Autoloading Standard in order to define our name spaces and classes in order to place files that will be auto loaded according to our specification.
As I said my position involved mostly the creation of this export data services, when content was created / updated / deleted in Drupal it was automatically synched to MongoDB for easy visualisation and integrating with the Symfony front end part. To achieved such goals I used custom queries, entity APIs.
To reach the success of this project as Drupal Developer, I had to prove them the following experience:
- Continuous integration Tools such Jenkins, GitLab, Bamboo and Jira.
- Full stack technology: Php / Drupal 7 / MySQL / MongoDB / J-query / HTML / CSS.
- I liked the MongoDB technology and the challenges and solutions that involved.
- Using my range of expertises to advise the business owner about latest Technologies.
- Deliver a high level system performance for their high traffic user web sites.
- Research and use always latest technologies, champion innovation as a technical expert.
- Follow the PSR-2 Coding Style Guide, best practices and processes in Delivering Code.
- Code was delivered thorough pull requests, code reviews and Deployed and Automated in Jenkins.
- Data Base Design and Building new Custom Modules.
Among all different challenges I was efficient in communicating and co-ordinating the tasks with different people across different teams and technologies. Starting from collecting the new requirements and doing the functional and technical MongoDB Base designing, Custom Modules Architecture and creating all the Back-End CMS Management screens in a very proficient Drupal 7 backend role.