ahmedelbrmbaly / routiner

Rroutine tracker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Routiner: CS50 Final Project

Description:

Routiner is a website that helps user to manage their to-do list. A User can

  • Add, Delete, or Edit tasks
  • Choose a prioirty
  • Set start date
  • Set end date
  • Change status

Contact me: Linked In


Libraries

  • cs50

    • SQL
  • flask

    • Flask
    • flash
    • redirect
    • render_template
    • request
    • session - url_for
  • flask_session

    • Session
  • tempfile

    • mkdtemp
  • werkzeug.security

    • check_password_hash
    • generate_password_hash
  • pyIsEmail library used to validate email address

    • is_email
  • datetime

    • datetime
  • calendar

  • os

  • requests

  • urllib.parse

Files Structure

├── Database schema - Copy.drawio >> DataBase light Deisgn
├── Database schema - Copy.drawio.png >> DataBase light Deisgn
├── Database schema.drawio >> DataBase Heavy Deisgn
├── Database schema.drawio.png >> DataBase Heavy Deisgn
├── README.md >> Readme file
├── app.py >> Flask Application
├── helper.py >> Python helper file
├── routiner.db >> database
├── static
│ └── logo.png >> wesite logo
└── templates
├── add.html
├── edit.html
├── index.html
├── layout.html
├── login.html
├── profile.html
└── register.html

Templates

  • Layout
  • Index
  • Registration
  • Login
  • Profile
  • Add
  • Edit
  • Profile

Routes

  • Index
  • Registration
  • Login
  • Profile
  • Add
  • Edit
  • Profile
  • Delete

CRUD Operations Implemented

  • Create

    • New user
    • New Task
  • Read

    • User details
    • Task details
  • Update

    • User Details
    • Task details
  • Delete

    • Task Details

Database Deigning - Light Version

(I found it very complicated to implement this version of the app so I implemeted a light version)

Database configration - Light version

  • Create Tables:

    • CREATE TABLE users(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          user_name TEXT NOT NULL UNIQUE,
          email TEXT NOT NULL UNIQUE,
          password TEXT NOT NULL
        );
      
      
  •   CREATE TABLE routines(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          user_id INTEGER NOT NULL,
          name TEXT NOT NULL,
          description TEXT,
          priority INT,
          start_date DATETIME NOT NULL,
          end_date DATETIME,
          status text,
    
          CONSTRAINT fk_user_id
            FOREIGN KEY (user_id)
            REFERENCES users(id),
    
          CONSTRAINT CHK_Name
          CHECK (
                  status = "Done-On-Time"
                  OR status = "Done"
                  OR status = "Not-Set"
                  OR status = "Missed"),
    
          CONSTRAINT CHK_Priority
          CHECK(
                priority>=1
                AND priority<=5)
    
    
        );
    
    

    Database Deigning - Heavy Version

(I found it very complicated to implement this version of the app so I implemeted a light version)

Database configration - heavy version

  • Create Tables:

    • CREATE TABLE users(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          user_name TEXT NOT NULL UNIQUE,
          email TEXT NOT NULL UNIQUE,
          password TEXT NOT NULL
        );
      
      
    • CREATE TABLE routines(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          user_id INTEGER NOT NULL,
          name TEXT NOT NULL,
          description TEXT NOT NULL,
          start_date DATETIME NOT NULL,
          end_date DATETIME,
          weight INT,
          degree INT,
          CONSTRAINT fk_user_id
            FOREIGN KEY (user_id)
            REFERENCES users(id)
      
        );
      
      
    • CREATE TABLE status(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          name TEXT NOT NULL UNIQUE,
      
          CONSTRAINT CHK_Name
          CHECK (
                  name = "Done On Time"
                  OR name = "Done"
                  OR name = "Not Set"
                  OR name = "Missed")
      
        );
      
      
    • CREATE TABLE logs(
          ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
          user_id INTEGER NOT NULL,
          routine_id INTEGER NOT NULL,
          date DATETIME NOT NULL,
          status_id INTEGER NOT NULL,
      
          CONSTRAINT fk_user_id
            FOREIGN KEY (user_id)
            REFERENCES users(id),
      
           CONSTRAINT fk_routine_id
            FOREIGN KEY (routine_id)
            REFERENCES routines(id),
      
           CONSTRAINT fk_status_id
            FOREIGN KEY (status_id)
            REFERENCES status(id)
      
        );
      
      
  • Create indexes

    • CREATE UNIQUE INDEX user_id
        ON users (id);
      
    • CREATE UNIQUE INDEX user_name
        ON users (user_name);
      
    • CREATE UNIQUE INDEX routine_id
        ON routines (id);
      
    • CREATE UNIQUE INDEX logs_id
        ON logs (id);
      
    • CREATE UNIQUE INDEX status_id
        ON status (id);
      
  • ALTER TABLE routines RENAME COLUMN weight To priority;
    
  • I have to edit the database but the sqlite doesn't support and I lazy to drop the table and create it again 😂

      ALTER TABLE routines
      add check(priority>=1 and priority<=5>);
    

About

Rroutine tracker


Languages

Language:HTML 69.3%Language:Python 30.7%