Giter Site home page Giter Site logo

getparthenon / monorepo Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 1.0 3.71 MB

Monorepo for Parthenon development

Home Page: https://getparthenon.com

License: GNU General Public License v3.0

Shell 0.94% Jinja 0.02% JavaScript 2.94% Vue 2.16% TypeScript 0.18% CSS 5.56% PHP 82.79% Dockerfile 0.06% Gherkin 2.09% Twig 3.26%

monorepo's People

Contributors

dependabot[bot] avatar psihius avatar that-guy-iain avatar

Stargazers

 avatar  avatar

Forkers

psihius

monorepo's Issues

[Common] Elasticsearch Search Repository

Problem

Having complex data structures within a relational database can create long, complex queries that hurt SQL. It is common for data to be relational in nature so suited for a SQL database while needing to be searchable in a highly performant nature.

This problem can become more apparent when using microservices and the increase latency involed.

Solution

The common solution to this problem is to mirror the data into an Elasticsearch database that is read-only. This allows for the fast searching and fetching of the data while allowing the rest of the system to use the data as it wants.

This feature would need:

  • A command to sync the data to Elasticsearch
  • Ability to have updating the elastic search happen asynchronously. For example, if someone updates an entity in Athena it then gets updated in elasticsearch straight away instead of needing to wait for a timed
  • The use of elasticsearch aliases to prevent the data from becoming blank during syncs.

Example

More information can be found on this problem at https://getparthenon.com/blog/how-to-scale-complex-data

[User] Disable email confirmation

Description

Problem

Sometimes email confirmation isn't needed or wanted.

Solution

Provide an option to disable email confirmation requirement

Example

parthenon:
  user:
    enabled: true
    email_confirmation: false

[User] Signed in after sign up

Description

Problem

Users drop off during the sign up process due to not getting the email, the email going into their spam, getting disinterested, etc. Companies wish to improve their onboarding to improve their activation rates.

Solution

Make it possible to configure Parthenon to log users in directly after signing up.

Example

No response

[UI] Programable forms

Problem

Creating forms is generally mundane and repetitive and creating your own form elements is time-consuming.

Solution

Provide an easy and extendable Vue Form library that allows developers to quickly build highly interactive forms.

Example

<Form>
  <TextField v-model="name" label="Name" />
  <PasswordField v-model="password" label="password" min-length="8" max-length="32" />
  <SubmitButton>Submit</SubmitButton>
</Form>

[Payments] PayPal Support

Problem

As a company I need to be able to provide Payments via PayPal

Solution

No response

Example

No response

[Payments] Refund payment

Problem

Sometimes a company will want to refund a payment from a customer for various reasons.

Solution

Parthenon should provide a programmable way to refund payments as well as a section within Athena.

The Refund system should:

  • Keep track of which user issue the refund
  • Keep track of when the refund was done
  • Provide the ability to search and refunds
  • Provide an overview of refunds providing data

The data the refund system should make available easily.

  • List of users issuing refunds and how many refunds they've issued
  • A list of refunds made by a specific user
  • A list of products being refunded and how many times
  • Stats of users who got refunds, country, payment type, plan

Example

No response

[AuditLog] Audit Logs

Problem

Sometimes it's important for businesses to know who changed what and when as well as knowing why.

Solution

Provide an easy-to-use Audit Log system that logs when an object is changed and who changed it.

Example

No response

[Geosearch] Geosearch

Problem

It is common for applications to search for data based on geolocation. This can become slow and complex due to the fact the search is a secondary issue.

Solution

Provide an easy-to-use solution that provides the ability to have geosearch functionality on data.

Search types required:

  • Radius
  • Box search
  • Corridor Search (You search along a defined route)
  • Multi-point search

Example

No response

[Notification] TemplateEmail class

Problem

When building an application over multiple years, there ends up being a large number of email templates being used. These templates end up being defined throughout the codebase. When it's time to switch to a different email service provider, for example switching from MailGun to Sendgrid, it can become a time-consuming task to find all the places these templates are defined and change them.

Solution

Create a TemplateEmail abstract class that has a method that returns the name of the template id. This would allow for the creation of classes that define the template that is being used. These classes could be used when sending emails. And then the task of changing the template ids from one email service provider to another becomes a trivial task as it's just a case of going through a folder and updating all the classes in the folder or, at worse, finding all classes that extend the abstract class.

Example

No response

[Payments] Refactor Payments System to Obol

Problem

When building an application that accepts payments it's often required to use multiple payment gateways.

Solution

  • PaymentManager
  • SubscriptionManager
  • InvoiceManager
  • RefundManager

Example

No response

[Payments] Accountancy software integration

Problem

Companies often run into the problem where their accountancy numbers are all over the place, and there is no real source of truth.

Solution

Provide the ability to have Accountancy Software Integration

Must provide an integration layer with:

  • Freshbooks
  • ZohoBooks
  • Quickbooks

Example

No response

[User] Allow unconfirmed users to sign in with limited functionality

Description

Problem

Sometimes users sign up with a fake email, not realising there is an email confirmation. Sometimes it is preferable to allow a user to sign in with an unconfirmed email while having limited features.

Solution

Provide an option to allow unconfirmed logins and provide an option to configure which features are allowable with

Provide code for feature flagging if the user is confirmed or not.

Example

parthenon:
  user:
    enabled: true
    email_confirmation: true
    login_without_confirmation: true
    confirmed_features:
       - email_send 

[Export] Data Exporter

Description

Problem

It's common for companies to need to export data for their users to use via various formats. CSV/Excel/etc.

There are multiple ways of doing this. In foreground request process or background process.

One is providing the export file during a request and returning the file. This works at lower scales but often results in hacks as they grow. Generally either being increasing memory or timeouts. Both of which result in errors before being fixed and the same fix being done multiple times. The reality is, once it goes to a certain scale, it needs to be done in the background.

Once it's being done in the background, there are two options:

  • One is to send them to a page that checks to see if the file is ready and once it is provide it as a download. This provides a nice UX, however, is more complex and requires the user to stay on the page depending on how long the export is this may not be plausible.
  • Another one is to process it in the background and send the export as a file to the user. This is not so nice of a UX experience if the delay is short such as seconds or a minute or two.

Solution

Provide an export system that supports multiple file types.

File Type support:

  • CSV
  • Excel

Export types:

  • In the foreground in the process
  • In background with a download page when ready
  • In background with an email and an attachment when ready

Download page support:

  • Athena add a page to an Athena Section

Example

No response

[Invoicing] Rating Engine

Problem

In complex billing scenarios, it's required to provide different rates for items depending on various scenarios.,

Solution

Provide an easy-to-use to provide the ability to invoice items at various rates.

Example

No response

[Payments] Programatically charge a customer

Problem

Not all systems are SaaS/subscription based. It is required for many companies for their system to request payment from saved details upon request.

Solution

Parthenon should provide an easy to use way to charge a customer

Example

No response

[Payments] Bulk refund

Problem

Sometimes it's required to issue refunds in bulk due to a large-scale error

Solution

Provide the ability to run a command that allows for defining the rules for finding the payments that are to be refunded and refund them.

Example

No response

[UI] Table display

Problem

Displaying tables of data is mundane and repetitive.

Solution

Provide a flexible and extendable Vue library code that will allow for the easy and quick development of table views.

Example

<TableView :data="data">
   <Column field="name" label="Name" />
   <Column field="email" label="email" :sortable="true" />
  <ButtonGroup>
       <Button route-name="edit" param="id">Edit</Button>
  </ButtonGroup>
</TableView>

[Payments] Payouts

Problem

The ability to handle payouts to partners based is a common problem.

Solution

WIP

Example

No response

[FeatureFlags] Feature flags

Problem

There are many cases where a feature should not be enabled but can be deployed:

  • The feature has a bug in it and needs to be disabled quickly without development work or a deployment
  • The feature is being rolled out in a canary deployment method where only a few users get the feature
  • The feature is a premium feature which only some users are entitled to get
  • The feature is a custom feature for a specific customer and would not make sense for other users
  • The feature is not ready but is merged for continuous integration purposes.
  • The feature may need to be made available only at an unsocial time. For example at midnight.

Solution

Parthenon should provide a feature flag component that allows developers to have feature flags.

There should be support for:

  • Parthenon
  • optimizely
  • launch darkly

For Parthenon's functionality, there should be an Athena section that allows for the managing of feature flags.

Feature flags should be tooglable for the following rules:

  • On/off
  • User role
  • Custom user identifier (code required to define the customer user identifier)
  • Canary mode
  • Launch date
  • Termination date

Example

No response

[Athena] Log Event View

Problem

Employees want to see events relating to a specific object.

Logging tools can be intimidating as well as hard to navigate.

Solution

Provide the ability to add the ability to fetch and view logs relating to an object directly from the Athena object view page.

It would need to be able to:

  • support multiple logging systems.
  • support the ability define how to find the logs
  • support the ability to define how to map the log to view data

Logging Systems to Support:

  • Elasticsearch/ELK/Kibana
  • Loggly
  • Logtail

Example

Possbile idea to support multiple

interface LogRepositoryInterface
{
  /**
   * @return LogResult[]
   */
  public function search(SearchRules $searchRules) : array;
}

Possible way to support the ability to find logs

interface SearchRules 
{
  public function addRule(SearchRule $searchRule): void;

  public function fetchCompiledRules(): mixed;
}

Possible way of supporting mapping data

interface LogMapperInterface
{
  public function mapData(mixed $data) : array
}

Monolog compatibility issue

Parthenon version(s) affected

2.1.1

Description

Error while installing parthenon, when using any bin/console command

"Fatal error: Declaration of Parthenon\Common\Logging\Monolog\ProcessIdProcessor::__invoke(array $record): array must be compatible with Monolog\Processor\ProcessorInterface::__invoke(Monolog\LogRecord $record): Monolog\LogRecord in [PATH]\vendor\parthenon\parthenon\src\Common\Logging\Monolog\ProcessIdProcessor.php on line 27"

Same issue would happen with ExceptionProcessor, RequestProcessor and SessionProcessor

They all use array as a type for their __invoke method when LogRecord object is required by the interface

How to reproduce

I just installed parthenon with the composer create-project command

Possible Solution

No response

Additional Context

Tested on PHP 8.2 and 8.1

[Payments] See payments for customer in Athena

Problem

It is required for support staff who don't have access to the payment provider to be able to issue refunds or help with providing information about payments

Solution

There should be a section attached to a customer's Athena view page that shows their payment history.

The section should provide:

  • Ability to see the date the payment was mad
  • The amount the payment was for
  • Ability to refund the payment
  • Ability to see pending/failed payments
  • Ability to define which roles can do which actions

Example

No response

[Common] Uploader handle read and delete

Problem

When uploading files it's often required to read or delete the files. The uploader class should handle this.

Solution

No response

Example

No response

[Payments] Athena Payments display

Problem

Companies would like to know more information about their payments in regards to their own system.

Solution

Parthenon should provide the ability to see and view payments with Athena

The section should provide:

  • A view of outstanding payments
  • A view of failed payments
  • A view for successful payments
  • A view for payment stats

Example

No response

[StateMachine] State Machine

Problem

For complex applications, objects may have state and they may have actions that need to be trigger when a state is reached or left.

For example:

  • A system may require people take action when a new object is created
  • When an object is updated it may need to be approved

Solution

To be defined later.

Example

No response

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.