Skip to content

Instantly share code, notes, and snippets.

@danleyb2

danleyb2/app.md

Last active Nov 24, 2020
Embed
What would you like to do?
Welcome file


Project Management Application

System Structure

The application is built using the Django web framework
There will be a frontend for normal users and backend for administrators.

The backend is gives an overview of the whole system and provides restricted functionality
such as new users creation and a detailed view of all the data in the application

User Management

The application has 3 user levels

  • Admins -> Have access to the backend
  • User -> Normal users with only access to the frontend
  • Client -> Represents a client team member and cannot Login.

Data Synchronization

The application will sync data with Gsuite by periodically querying the Google Drive, Sheets and Doc APIs

Here is a sync process flow that would pull in all the data at a given data.

  1. Check if the top level GDrive folder (root) has been updated since the last check

  2. If Yes, Loop through all folders in the root folder to identify new changes or new clients

    • new found clients will create a Client entry in the db.
    • existing clients will be identified using the unique folder ID from google drive
  3. In client’s folders that have changes

    • Check for GSheets that contains a string in their filename (PCB Design) to identify new sheets
      - this will create a Sheet then a Project entry in the database
      - a snapshot of the sheet rows will also be saved including a version number from google drive
    • Check for sheets that have been updated since the last check using the version number
    • Check for updates to Client Google Doc using Google Sheets API and Save new changes into Status entry into the database
  4. For sheets that have been updated, Retrieve and create a new snapshot in the app
    This involves querying all the rows using Google Sheets API and creating Row entries in the DB

For GitHub Latest updates, the app will use webhooks to receive the updates from github and save to the Commits table

Database Tables

User

name
email
password
access_level ADMIN | USER | CLIENT
status

ClientDoc

name str
ref str

Client

name str
logo image
ref GDrive Folder ID
doc fk Client

Member

user fk User
client fk Client

DocUpdates

person fk Member
created datetime
message text

Sheet

name str
ref str

Version

number int
sheet fk Sheet
update_at datetime

Rows

version fk Version
ee bool
me bool
fw bool
sch bool
lay bool
rfq bool

Project

name str
client fk Client
sheet fk Sheet

Status

update str
created_at datetime
project fk Project

Commits

author
date
message
revision

Frontend

From the data retrieved through syncronization,
Queries are used to generate the tables and any other reports on the frontend pages

Structure Decissions to Review

  1. Which authentication method to use with Google Drive Api
    Whether to use a google service account with G Suite Domain-wide Delegation or Just normal Oauth

  2. Efficient way to track changes to all files in the root folder for all clients
    Whether to use Changes Collection to track changes to the drive files or Just poll and check the version number changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment