Skip to content

Commit

Permalink
Merge pull request #25 from nspalo/development
Browse files Browse the repository at this point in the history
BWA-Dev-8-Weather-App-CI-And-Documentation
  • Loading branch information
nspalo authored Sep 11, 2023
2 parents 2c17b0f + 50f1863 commit a6d77f2
Show file tree
Hide file tree
Showing 16 changed files with 212 additions and 55 deletions.
63 changes: 63 additions & 0 deletions .github/workflows/weather-app-ci-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Weather App CI

on:
push:
branches: [ "master", "development" ]
pull_request:
branches: [ "master", "development" ]

jobs:

build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Docker Login
env:
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_KEY: ${{ secrets.DOCKER_KEY }}
run: |
docker login -u $DOCKER_USER -p $DOCKER_KEY
# Script Permissions
- name: Setting up Permissions
run: |
chmod +x -R ./scripts/*.sh
mkdir -p ./storage/logs/ ./bootstrap/cache/
chmod 777 ./storage/ ./bootstrap/cache -R
# Docker Images
- name: Building the Docker Images
run: ./scripts/build.sh

# Docker Containers
- name: Start Docker Containers
run: ./scripts/up.sh -d

# Composer
- name: Run Composer
run: |
./scripts/composer.sh install
./scripts/composer.sh dump-autoload
# NPM
- name: Run NPM
run: |
./scripts/run.sh npm install
./scripts/run.sh npm run build
# Code Quality Check
- name: Run PhpStan
run: ./scripts/composer.sh run phpstan

- name: Run Easy Coding Sandards
run: ./scripts/composer.sh run ecs-all

- name: Run Automated Test with PhpUnit
run: ./scripts/composer.sh run phpunit

# Teardown
- name: Stop container and remove images
run: ./scripts/down.sh -v
136 changes: 136 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,138 @@
# Bizmates Ph Weather App Coding Exam
![Weather APP BUILD](https://github.com/nspalo/bizmates-weather-app-exam/actions/workflows/weather-app-ci-build.yml/badge.svg)

A simple weather forecasting application built with Laravel that can display weather update from Japan as a coding exam for Bizmates Ph

----

# About the Weather App
- Is a simple web application built with laravel that can search a for a given location's coordinates and get the weather update and forecast.
- Uses Geoapify geocoding Api to get the geolocation and Open Weather Map Api to get weather data
- This project observes:
- PSR Coding Standards
- Object-Oriented Principles / DRY / KISS
- SOLID Principles / Clean Code
- Automated coding standard checking using PhpStan & Easy Coding Standard
- Automated testing using PhpUnit

![Weather App](https://github.com/nspalo/bizmates-weather-app-exam/blob/feature/BWA-9-weather-app-readme/docker/documents/weather-app-sample-image.jpg)

## Web Stack
- Docker
- NginX stable-alpine
- PHP 8.1 fpm-alpine
- Composer 2.6.1
- Node 20.6-alpine
- Laravel 9
- Bootstrap 5

### Pre-requisite
- Docker
- Geoapify Account
- Generate API Key
- Open Weather Map Account
- Generate API Key
- Configure the API Keys in the `.env` file
- `See: <ProjectDir>/src/.env`
- For more info, check `<ProjectDir>/src/config/services.php`

## Set Up Procedure
### Step 1: Service containers - Building, Starting, and Stopping
```
// Building the services/containers
> ./scripts/build.sh
// Starting the services/containers
// - optionally add the -d (detach) flag to run in the background
> ./scripts/up.sh -d
// Or do a one-liner command for the build and start process
> ./scripts/up.sh -d --build
// Stoping the services/containers
// - To stop a specific service add the continer name
> ./scripts/stop.sh <_ContainerName_>
// Tear down routine
// - optionally add the -v to remove the images
> ./scripts/down.sh -v
```

### Step 2: Packages and Dependencies
```
// Running composer install
> ./scripts/composer.sh install
> ./scripts/composer.sh dump-autoload
// Running NPM
> ./scripts/run.sh npm install
> ./scripts/run.sh npm run build
// Copying Laravel .env file
> ./scripts/composer.sh run post-root-package-install
// Generating Key
> ./scripts/artisan.sh key:generate
```

### Step 3: Accessing the site
Hit the browser at `localhost:8080`

### API Endpoint
`localhost:8080/api/weather-update?location=Some-Location`

where `?location=` is query string for the location to check for weather update/forecast


----

## Code Quality and Testing
```
// Running PhpStan
> ./scripts/composer.sh run phpstan
// Running Easy Coding Standards for the entire project
./scripts/composer.sh run ecs-all
// Running Easy Coding Standards for App or Test ONLY
./scripts/composer.sh run ecs-app
./scripts/composer.sh run ecs-test
// Running Auto-Fix for ecs
./scripts/composer.sh run ecs-fix-app
./scripts/composer.sh run ecs-fix-test
// Running Automated Test with PhpUnit
./scripts/composer.sh run phpunit
```

----

## BizmatesPh Coding Exam Requirements
### Background
- This page aims to provide travel information of Japan for foreign tourists visiting Japan for the first time.

### Tech Stack
- PHP (version 8+ preferred)
- Framework Laravel (any version)
- HTML5, CSS3, Javascript ES5/ES6 or any JS Library preferred (VueJS is a plus)
- Responsive Design (Desktop and Mobile)
- API Endpoints
- Automated Testing

### Submission method
- Provide a github repository once finished
- Development should be within 4 - 5days

### API Service
- Open Weather Map's Daily API
- Foursquare Search Venue API

### Code Quality
- PSR Coding Standards 1,2,4 & 12
- Object-Oriented Principles
Clean Code & SOLID Principles
- Google JavaScript Style Guide
- Google HTML/CSS Style Guide
Binary file added docker/documents/weather-app-sample-image.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
},
"scripts": {
"post-autoload-dump": [
"mkdir -p ./bootstrap/cache/",
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
Expand Down
4 changes: 2 additions & 2 deletions src/config/services.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
'max_output' => env('OPEN_WEATHER_MAX_OUTPUT', '5'),
'unit' => env('OPEN_WEATHER_UNIT', 'metric'),
'lang' => env('OPEN_WEATHER_LANG', 'en'),
'uri' => env('OPEN_WEATHER_API_URI', ''),
'uri' => env('OPEN_WEATHER_API_URI', 'api.openweathermap.org/data/2.5'),
],
'geoapify' => [
'filter' => env('GEOAPIFY_FILTER', 'countrycode:jp'),
Expand All @@ -46,7 +46,7 @@
'lang' => env('GEOAPIFY_LANG', 'en'),
'max_output' => env('GEOAPIFY_MAX_OUTPUT', '1'),
'type' => env('GEOAPIFY_TYPE', 'city'),
'uri' => env('GEOAPIFY_API_URI', ''),
'uri' => env('GEOAPIFY_API_URI', 'api.geoapify.com/v1/geocode/search'),
'default_search' => env('GEOAPIFY_DEFAULT', 'Tokyo, Japan'),
],
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Unit;
namespace Tests;

use Illuminate\Contracts\Console\Kernel;

Expand All @@ -15,7 +15,7 @@ trait CreatesApplication
*/
public function createApplication()
{
$app = require __DIR__ . '/../../bootstrap/app.php';
$app = require __DIR__ . '/../bootstrap/app.php';

$app->make(Kernel::class)->bootstrap();

Expand Down
23 changes: 0 additions & 23 deletions src/tests/Feature/ExampleTest.php

This file was deleted.

2 changes: 1 addition & 1 deletion src/tests/Unit/TestCase.php → src/tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Unit;
namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

Expand Down
2 changes: 1 addition & 1 deletion src/tests/Unit/Enums/DirectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Unit\Enums;

use App\Enums\Direction;
use Unit\TestCase;
use Tests\TestCase;

class DirectionTest extends TestCase
{
Expand Down
20 changes: 0 additions & 20 deletions src/tests/Unit/ExampleTest.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use App\Services\ConfigurationMapper\Exceptions\UnknownServiceConfigurationException;
use App\Services\ConfigurationMapper\ServiceConfigurationMapper;
use Unit\TestCase;
use Tests\TestCase;

class ServiceConfigurationMapperTest extends TestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
use App\Services\UrlQueryStringBuilder\Interfaces\UrlQueryStringBuilderServiceInterface;
use Illuminate\Http\Client\RequestException;
use Illuminate\Support\Facades\Http;
use Unit\TestCase;
use Tests\TestCase;

class GeocodingServiceTest extends TestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Unit\Services\GeoapifyApi\Resources;

use App\Services\GeoapifyApi\Resources\GeolocationResource;
use Unit\TestCase;
use Tests\TestCase;

class GeolocationResourceTest extends TestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Unit\Services\OpenWeatherApi\Resources;

use App\Services\OpenWeatherApi\Resources\WeatherResource;
use Unit\TestCase;
use Tests\TestCase;

class WeatherResourceTest extends TestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Unit\Services\OpenWeatherApi\Resources;

use App\Services\OpenWeatherApi\Resources\WeatherResources;
use Unit\TestCase;
use Tests\TestCase;

class WeatherResourcesTest extends TestCase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Unit\Services\UrlQueryStringBuilder;

use App\Services\UrlQueryStringBuilder\UrlQueryStringBuilderService;
use Unit\TestCase;
use Tests\TestCase;

class UrlQueryStringBuilderServiceTest extends TestCase
{
Expand Down

0 comments on commit a6d77f2

Please sign in to comment.