{"id":15024148,"url":"https://github.com/noud/gripp-api-platform","last_synced_at":"2025-09-12T05:40:57.805Z","repository":{"id":39025782,"uuid":"190147236","full_name":"noud/gripp-api-platform","owner":"noud","description":"Gripp Symfony","archived":false,"fork":false,"pushed_at":"2022-12-13T12:34:35.000Z","size":5183,"stargazers_count":7,"open_issues_count":21,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-10T15:19:48.909Z","etag":null,"topics":["api","bash","bootstrap","bootstrap4","composer","css","css3","curlphp","docker","javascript","jquery","json-rpc","mvc","npm","php","php56","php7","php71","php72","symfony"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-04T06:59:59.000Z","updated_at":"2022-02-15T17:20:46.000Z","dependencies_parsed_at":"2023-01-28T12:15:44.989Z","dependency_job_id":null,"html_url":"https://github.com/noud/gripp-api-platform","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/noud/gripp-api-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noud%2Fgripp-api-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noud%2Fgripp-api-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noud%2Fgripp-api-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noud%2Fgripp-api-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noud","download_url":"https://codeload.github.com/noud/gripp-api-platform/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noud%2Fgripp-api-platform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274759115,"owners_count":25343872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bash","bootstrap","bootstrap4","composer","css","css3","curlphp","docker","javascript","jquery","json-rpc","mvc","npm","php","php56","php7","php71","php72","symfony"],"created_at":"2024-09-24T19:59:51.537Z","updated_at":"2025-09-12T05:40:57.760Z","avatar_url":"https://github.com/noud.png","language":"PHP","readme":"# Gripp Symfony\n\n## Architecture\n\n![Architecture](./docs/architecture.png?raw=true \"Architecture\")\n\n## Use\n\n![Gripp Symfony](./docs/gripp_symfony.png?raw=true \"Gripp Symfony\")\n\n[![License: MIT](http://img.shields.io/badge/License-MIT-blue.svg)](http://raw.githubusercontent.com/noud/gripp_api/master/LICENSE)\n[![master](http://img.shields.io/badge/current-dev-aa11ff.svg)](http://github.com/noud/gripp_symfony/releases)\n\nThis is a Symfony client application that does work with\n\n[Gripp](http://www.gripp.com) there [Gripp API v3](http://github.com/noud/gripp_api)\n\nand demonstrate Gripp API use.\n\nThe application is highly independent of the Entities used and a good example of writing generic code and [API-First](http://swagger.io/resources/articles/adopting-an-api-first-approach/) development to facilitate a [Rapid-application development (RAD)](http://en.wikipedia.org/wiki/Rapid_application_development) process.\n\n## API front ends\n\nThe application consumes the Gripp API as client but has various API server interfaces itself as well:\n* [GraphQL](http://en.wikipedia.org/wiki/GraphQL) with it's own [GraphiQL](http://github.com/graphql/graphiql/tree/master/packages/graphiql#readme) in-browser IDE with generated API documentation\n    - [Gatsby React](http://github.com/noud/gatsby-graphql-gripp/blob/master/README.md) static [Progressive Web App (PWA)](http://en.wikipedia.org/wiki/Progressive_web_applications), mobile app\n* [RESTful](http://en.wikipedia.org/wiki/Representational_state_transfer)\n    * [Swagger OpenAPI](http://swagger.io/specification/) with generated API documentation\n    * [Hydra](http://www.hydra-cg.com/) and [JSON-LD](http://json-ld.org/)\n        - [React Admin](http://github.com/noud/react-admin-rest-openapi-gripp/blob/master/README.md)\n        - [React Next Express](http://github.com/noud/react-next-express-hydra-gripp/blob/master/README.md) front end\n        - [React Redux](http://github.com/noud/react-redux-rest-openapi-gripp/blob/master/README.md) [Progressive Web App (PWA)](http://en.wikipedia.org/wiki/Progressive_web_applications), mobile app\n        - [Vue](http://github.com/noud/gripp_client_vue/blob/master/README.md) [Single-page application (SPA)](http://en.wikipedia.org/wiki/Single-page_application), web application or web site\n    * [JSON:API](http://jsonapi.org/)\n    * [HAL](http://stateless.co/hal_specification.html)\n    * [JSON](http://www.json.org/)\n    * [XML](http://www.w3.org/XML/)\n    * [YAML](http://yaml.org/)\n    * [CSV](http://tools.ietf.org/html/rfc4180)\n    * [HTML](http://whatwg.org/)\n* [JSON-RPC](http://www.jsonrpc.org/specification)\n\n## export\n\nThe web application is able to export it's data to your desktop:\n* [CSV](http://en.wikipedia.org/wiki/Comma-separated_values)\n* [vCard](http://en.wikipedia.org/wiki/VCard) as an extended(*) Writer\n* [JSON](http://en.wikipedia.org/wiki/JSON)\n* [Microsoft Excel](http://en.wikipedia.org/wiki/Microsoft_Excel#File_formats)\n* [XML](http://en.wikipedia.org/wiki/XML)\n\n*) The extended Writer is part of this project and still [Proof of concept (PoC)](http://en.wikipedia.org/wiki/Proof_of_concept).\n\n## Security\n\nThe application uses various security measures:\n* [Security at GitHub](http://github.com/security)\n* [Symfony Security Monitoring](http://security.symfony.com)\n* [Structured Query Language (SQL) injection](http://en.wikipedia.org/wiki/SQL_injection) protection\n* [Cross-site request forgery (CSRF)](http://en.wikipedia.org/wiki/Cross-site_request_forgery) protection\n* [bcrypt](http://en.wikipedia.org/wiki/Bcrypt) password hashing\n* [Two-factor authentication (2FA)](http://en.wikipedia.org/wiki/Multi-factor_authentication) using [Google Authenticator App](http://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)\n* [Bearer Authentication](http://swagger.io/docs/specification/authentication/bearer-authentication) for JSON-RPC API server\n* [JWT Authentication](http://jwt.io/) for RESTful API server\n* Use [Cross-Origin Resource Sharing (CORS)](http://enable-cors.org) headers for RESTful API server\n\n## Provisioning\n\nAdd this local hostname to your DNS.:\n```shell\n127.0.0.1       gripp.localhost\n```\nStart Docker. Provision the application with PHP Composer and JavaScript Node.js NPM packages.:\n```bash\nbin/docker_start.sh\nbin/provision.sh\n```\n## Generating\n\nWe generate large part of the application:\n1. JSON to JSON [Table Schema](http://frictionlessdata.io/specs/table-schema) using [PHP](http://php.net)\n2. JSON [Table Schema](http://frictionlessdata.io/specs/table-schema) to Database Schema using [tableschema-sql-js](http://github.com/frictionlessdata/tableschema-sql-js)\n3. [Generate Models](http://symfony.com/doc/current/doctrine/reverse_engineering.html) with an extended(*) [Doctrine Object Relational Mapper (ORM)](http://www.doctrine-project.org/projects/orm.html) ImportMapping Command\n4. [Generate Views](http://symfony.com/doc/master/bundles/SonataAdminBundle/reference/console.html#make-sonata-admin) with an extended(*) [SONATA PROJECT](http://sonata-project.org/)s [AdminMaker Command](http://symfony.com/doc/master/bundles/SonataAdminBundle/reference/console.html#make-sonata-admin) using the [Symfony MakerBundle](http://symfony.com/doc/current/bundles/SymfonyMakerBundle)\n\n*) The extended code generators are part of this project and still [Proof of concept (PoC)](http://en.wikipedia.org/wiki/Proof_of_concept).\n\nThe first 2 steps are already done, being outside this project scope. You have to perform the last 2 steps, import the Database Schema and generate Entities and Views, here is how:\n\nImport the database schema and relations.:\n```bash\nmysql -u root -p db_name\u003c db/schema.sql\nmysql -u root -p db_name\u003c db/relations.sql\n```\nGenerate the entities and admin webpages. Migrate and load example data:\n```bash\nbin/generate.sh\nbin/console doctrine:migrations:migrate\nmysql -u root -p db_name\u003c db/data.sql\n```\n## Tests\n\nFirst start and go into your Docker workspace:\n```bash\nbin/docker_workspace.sh\n```\nIn there run:\n```bash\nbin/phpunit\n```\n\n## Usage\n\nBrowse to the login screen:\n```bash\n/opt/google/chrome/chrome http://gripp.localhost/sonata\n```\nYou will be prompted for your credentials:\n\n![Login](./docs/sonata_login.png?raw=true \"Login\")\n\nThe username demo and password demo will do. (The inactive username nodemo and password nodemo will not be allowed to login.) If you succeed to login, you can navigate to your login credentials in the upper right corner pull-down:\n\n![Credentials](./docs/sonata_credentials.png?raw=true \"Credentials\")\n\nAs you see in the upper right messages and tasks navigation items and tasks pull-down the application uses the [AdminLTE 2](http://adminlte.io/preview) [Bootstrap 3](http://getbootstrap.com/docs/3.4/) template.\n\nThe dashboard contains the [vis.js](http://visjs.org) [Timeline](http://visjs.org/timeline_examples.html), for now only with, entries of the messages and tasks:\n\n![Dashboard](./docs/sonata_dashboard.png?raw=true \"Dashboard\")\n\n## Developing\n\nFeel free to contribute.\n\n## Contributions made\n\nUsing existing code as much as possible, some projects got an accepted Pull Request:\n* [AdminLTE Bundle for Symfony 4](http://github.com/kevinpapst/AdminLTEBundle)\n      * [Dutch translation added](http://github.com/kevinpapst/AdminLTEBundle/commit/9efc0f388ab908c7187ce7cbfc7d4ef6173e7da5#diff-f1f6a7153c98d120f1ff1ef005ce142e)\n* [tableschema-sql-js](http://github.com/frictionlessdata/tableschema-sql-js)\n      * [Constraints required, enum added and Field type date, datetime and time added](http://github.com/frictionlessdata/tableschema-sql-js/commit/aff64731771ce095d521373182d4f080fb5f84d2)\n\n## Tools\n\nCreated with [Eclipse PDT Extension group Symfony framework plugin](http://p2-dev.pdt-extensions.org)\n ([Eclipse Marketplace](http://marketplace.eclipse.org/content/doctrine-plugin))   \n[Eclipse](http://www.eclipse.org/) is free open-source project that grows with your contributions.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoud%2Fgripp-api-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoud%2Fgripp-api-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoud%2Fgripp-api-platform/lists"}