Skip to content

Instantly share code, notes, and snippets.

@geoff-maddock
Last active September 8, 2017 18:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geoff-maddock/aef3e7cf8e1b5567bbea0695367a7e47 to your computer and use it in GitHub Desktop.
Save geoff-maddock/aef3e7cf8e1b5567bbea0695367a7e47 to your computer and use it in GitHub Desktop.
Cadence Project Plan
Cadence Project
==============
*Updated by Geoff Maddock 9.8.17*
>**Objective ** *Rebuild SMC using [Symfony v3.3.x](https://symfony.com/) and other updated technologies*
## Introduction
This document is a working plan to track what considerations we need to make in doing this redesign, what choices we make along the way and why, in case we need to look back and relay that information to stakeholders and our team.
### Key to Abbreviations
**[O]** Owner of topic or issue
**[S]** Stakeholder in the company if applicable
**[Q]** Question about choice
**[A]** Agreed Answer
**[A?]** Suggested Answer
**[I]** Needs issue created in Cadence repository
**[#]** Github Issue related to topic
###Timeline
- Brainstorming & Learning - **Summer 2017**
- Kick Off - **Fall 2017**
- Launch - **Spring 2018**
- - -
#Project Outline
##Stack + Tools
- Repository
- https://github.com/Expedient/cadence
- Container: **Docker**
- [Q] where to find production server docker image?
- [O] Bobby Henry
- OS: **Centos v7.3**
- Databases
- **MySQL v5.7**
- **Oracle**
- ORM: **Doctrine**
- **PHP 7.x**
- **Symfony 3.3.x**
- Frontend Framework:
- [Q] Will we use a frontend framework?
- [A?] **Vue v2.x**
- Webserver: **Nginx** vs **Apache**
- [Q] What webserver will we use?
- IDE: **PHP Storm**
- Production Server
- [Q] Where?
- [Q] Will we load balance in the same way as corp07/08?
- Staging Server
- [Q] Where?
## Dependencies / Plugins
- [Q] What 3rd party plugins do we want to use in this project?
- "doctrine/doctrine-bundle": "^1.6",
- "doctrine/doctrine-migrations-bundle": "^1.2",
- "doctrine/orm": "^2.5",
- "friendsofsymfony/user-bundle": "~2.0",
- [Q] What 3rd party plugins from Symfony 1.4 do we need to replace?
- sfGuardUser
- sfAsset
- solr?
- PHP Office
## Application
[Q] How do break up the design of the application
- kernels - roughly replace 1.4 apps
- support (frontend), app (backend), api
- configuration [Q] What configs go where?
- app.yml
- config.yml
- parameters.yml
- routing.yml
- security.yml
- *.yml.dist is the committed config template
- environment
## Bundles
- [Q] Break apart code into modules to make reusable - how?
- app bundle - holds the code specific to the project
- base bundle - holds our generic code
- [Q] What to include in this bundle?
- user bundle - holds our own user code
- [Q] Is this part of base bundle, a seperate bundle or other?
## Authentication
- built in, created new or FoS?
- encryption
- sha1 - existing, has a salt
- bcrypt - symfony choice, stronger, internal salt (how does that work?)
- user type(s) - support, app, api
- two-factor auth
- ldap/active directory for app users
- forgot password/recovery
- lock-out process
## Authorization
- roles (symfony 3+ concept) - may be able to use as an over-arching group, or might use to match functional groups at a high level
- groups - existing way to relate permissions
- permissions - individual authorizations
- other ? - departments, etc
- authorization service - should we build a service that makes authotization accessable everywhere (or is it...it might be)
##Testing
- codeception
- unit testing
- functional testing
- acceptance testing
## Frontend + Layout
- css/scss/less
- bootstrap 4
- custom
- javascript
- jquery
- other libraries?
- cadence.js - replacement for koba.js functionality
### Views & Page Components
- list
- grid
- show
- edit
- edit-with-sidebar *(ex. quote edit with product list)*
- tab-nav *(ex. the bar that contains the list of tabs)*
- tab-content
- dropdown
- menu
- event-list
- filters
- list-actions
- batch-actions
- modal
- modal-wizard (may not be seperate)
- confirm-dialog
- popover
## File "Assets"
- Replace depreceated sfAsset functionality
- Build replacement file resource
## Logs
- how to implement our in-app logging
- how to use symfony's build in logging
## Events
- how to use / implement SMC events in symfony 3?
- [Q] how to display events to user
## Notifications
- add notification queue
- emails
- notifications in app
- sms?
- api call?
## Tasks
- how to implement tasks in symfony 3?
## Business Logic
- where to keep it?
- how to reference and use it?
- convert peer classes + business logic functions over to doctrine
## Services
- what services do we want to implement? (this is a broad question)
## Utilities
- [Q] what existing utilities do we have and intend to bring over or replicate?
- [Q] what 3rd party apps might better serve any of this functionality?
## Applications / Kernels
### Support (Frontend)
- routes
- tickets
- change controls
- workbooks
- dns
- assets
- ...
###App (Backend)
- routes
- customers
- tickets
- change controls
- quotes
- delivery
- workbooks
- users
- dns
- ip block
- assets
- ...
### API
- routes
- base api code
- api controllers
- ticket email gateway?
## Security
- what other security issues are there?
- private ip space?
- accessability to other servers making API calls
## Debugging
- What debug tools to use that are part of symfony, built by us or general best practices
## Documentation
- where will documentation live? [A?] techdocs.expedient.com
- in app user documentation? [A?] knowledgebase?
- api endpoint documentation?
- [A] Docs route ex. https://dev01-supportadmin.expedient.com/api2.php/docs
## Deployment
- how will we deploy this new app?
- Continuous Integration?
- in parallel with existing app?
- replacing one app?
## Monitoring
- newrelic - comprehensive status and log monitoring
- splunk - in depth log search
- cacti - network monitoring
- echo base - custom built at a glance status monitoring
## Additional Specifications
[Q] Do we need to write up or document any of these?
- *infrastructure* - what was used to build the app [A?] This document
- *developer/technical* - how did we organize the code, what best practices did we choose to follow, what design patterns did we implement, what unique pieces did we implement [A?] This document
- *functional* - how does the end user interact with the application [A?] In confluence + in app knowledge base
## Project Resources
Documents, links or other notes that we might want to reference
- Symfony https://symfony.com/
- Doctrine http://www.doctrine-project.org/
- Codeception http://codeception.com/for/symfony
- Teams Channels
- Cadence
- Symfony
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment