Code Monkey home page Code Monkey logo

mango's Introduction

Mango

Mango is the core module which allows us to easily connect applications and services. The services and applications built using this framework and Docker allow us to have a some control over a lot of moving parts.

Every module can be individually edited, compiled and deployed, you don't even need Go or Dart installed, via Docker.

Applications are built using;

  • Dart for Front-end logic only.
  • Go for Back-end logic
  • Templates are rendered using Go's default HTML Template language.
  • Husk for Storage
  • Docker for Networking and scalability

HTTPS is the only option for running these modules, as modern-day requirements don't allow for un-secure connections and dealing with security at deploy time is not fun.

CodeFactor

Project Requirements

  • Docker
  • docker-compose

Project Layout

This repository used to contain all of the APP and API modules, but they have since been moved to their own repositories. Now it contains shared logic for Controllers, Service Discovery, etc. As well as some information on how to setup and run everything in union.

The 'Router' and 'Gate' applications are key to running any of the other products found within this profile. If you don't require fancy named URLs, then running 'Router' is all you need to get up and running.

After cloning the desired application, navigate to it and run using docker-compose. Specific details on running every module can be found in it's README.md

Please see /secure repository for User login information.

On Paged Data

Mango API's support paging out of the box, as we use Husk which demands all results be requested by page. Every GET request, where the intention is to get many results, you have to specify the :pagesize Data. https://ads.localhost/advert/all/:pageSize https://ads.localhost/advert/all/A6

Where A6 is Page A & 6 items per Page is requested. We support 26 pages (A-Z) and any positve amount of results per page.

mango's People

Contributors

louisevanderlith avatar vickydejager avatar mikaylacoetzee avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

mango's Issues

Create AD creation workflow.

When creating a new Ad, the following workflow should be followed.

Click Sell
Verfiy VIN
Upload Photos
Validate Images {Confirm vehicle match}
Provide Details of Item (Extra details ex.papers)
Provide Price of Item
Validate Price
POST

Create register page

Everyone selling an item, must have an account.

Register Model

Name
Email
Cellphone
Location (Lat & Lon)
Verified == false
"Password"

Update router URL after an applications restarts.

The proxy application doesn't get an updated URL if it's subdomain applications weren't active at the time of launch. We could merge the "router" application with the "proxy/main" application to make it easier to control load and requests

Build up/down vote component

Many items on this application can be up/down voted.

Votes have the following rules:

Only logged in accounts can vote
One vote per user
Votes should only show the summary after a vote.
If non-users click on vote, they will be asked to register.

Application InstanceKey must be accessible from UI.

Currently we have to keep full URLs in javascript, but this creates more work when deploying and testing. We should rather get the URL from the target application ("Communication.API") and the instanceKey as we do in the back-end services.

SSL Certs to be copied to bin folder.

Because Listen and Serve TLS is running on a goroutine, we don't see errors from this function.
The most common error is that the certificates aren't copied to the bin folder automatically and causes the Gate.APP to crash if it can't find the caretificates.

Analytics only to load on live

Before analytics is loaded, we should implement a check to see if the applications are running in DEBUG. This will avoid inaccurate page data.

Create AD page

Ads should display all data made available by the "Ad model"
Users should also be able to comment on the ad, as well as up/down vote it.
Comments can also be up/down voted.

Get project up to OS standard.

https://www.jetbrains.com/buy/opensource/?product=go

You have to be a project lead or a regular committer.
Your OS project meets the Open Source definition.
Your OS project may not offer paid sponsorship; receive funding from commercial companies or organizations (NGO, education, research, or governmental). You do not provide any paid support, consulting or training services for your OS project, and you do not distribute paid versions of your OS software. Contributors who are paid to work on the project are not eligible.
Your OS project is in active development for a minimum of 3 months.
Your OS project's community is active. This means that you have recent activity in your newsgroups or forums.
Your OS project has a website including either a regularly updated News section or links to social network account(s) where project updates are posted.
You release updated builds on a regular basis.

Comms.API to support multiple clients.

We need to retrieve client information so that we can send contact-us emails to their respective destinations.

We will also need to log application names in the comms database.

Create login page

People selling items must have an account, thus the need for a login page.
All logins should be salted and hashed. At this stage we don't have a need for using Oauth logins.

Once registered, users should be able to login with their email OR cellphone details.

Replay Loggin

Loggin should be setup, so that we can replay every action a user executes. This way, when an error occures, we can take the session ID and replay all events.

Create "seller" profile page

sellers will often be viewed to see which other ads they currently have.

This page should display the basic information of the seller and also his/her active ads.

People can also comment and up/down vote sellers.

Ensure authentication process is followed everywhere

For API level authentication we should return a 401 and any caller should then handle the status as needed.

For UI level authentication, when a user is not authorized, we must redirect to the login page. The referer/returnURL will be the original application requested. This means that the user will be redirected to the original application after successful login.

Registration validation

Warring not return to page.
"Password must be at least 6 characters."

Possible to enter invalid email. (end of email)

Proxy must submit statistics to DB

We need to keep track of all Request/Response Data;

  • Time from Request to Response
  • Request Size
  • Response Size
  • Origin and Referers
  • Other data to come...

Blog site to be built

Part of making our software meet OS standards, we need to have a news/updates section.
This will also be used to post blogs

Build VIN Number Deserializer

https://en.wikipedia.org/wiki/Vehicle_identification_number
https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
https://www.yourmechanic.com/article/how-to-decode-a-vin-vehicle-identification-number-by-jason-unrau

https://jalopnik.com/5165656/how-to-read-a-cars-vin

Can be used to give visitors more information on the vehicle and also to be used to verify other information related to the vehicle.

Most Important Brands

  • BMW
  • Ford
  • GWM
  • Honda
  • Hyundai
  • Isuzu
  • KIA
  • Mahindra
  • Mercedes
  • Nissan
  • Renault
  • Toyota
  • Volkswagen

Convert www to seperate APP

We can use www to host other businesses websites (avosa.co.za/carlacandles).
We will then also have to seperate the routing/domain logic to a seperate program.

Rebuild UI

Create TEST environment

We should be able to test certain applications without the need to spin up any other programs.

Login Page: Info Bubble for GPS

Some users will block the permission for requesting their location.
We should display an info section stating the reasons we are trying to get the user's location.

Login Page CSS

The login and registration pages' CSS doesn't fit in the screen correctly.

Paged Data by Default

When a page with many records (GetAll) is loaded, it should always be loaded as page 1 and limit records to 10.
When a user navigates to the next "page", we can go back to the server and load the next result set.
This will ensure that every "page" is index-able.

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.