from flask import Blueprint, request, jsonify
from flask_restful import Api, Resource # used for REST API building
from datetime import datetime

from model.users import User

# blueprint, which is registered to app in main.py
user_api = Blueprint('user_api', __name__,
                   url_prefix='/api/users')

# API docs https://flask-restful.readthedocs.io/en/latest/api.html#id1
api = Api(user_api)
class UserAPI:        
    class _Create(Resource):
        def post(self):
            ''' Read data for json body '''
            body = request.get_json()
            
            ''' Avoid garbage in, error checking '''
            # validate name
            name = body.get('name')
            if name is None or len(name) < 2:
                return {'message': f'Name is missing, or is less than 2 characters'}, 210
            # validate uid
            uid = body.get('uid')
            if uid is None or len(uid) < 2:
                return {'message': f'User ID is missing, or is less than 2 characters'}, 210
            # look for password and dob
            password = body.get('password')
            dob = body.get('dob')

            ''' #1: Key code block, setup USER OBJECT '''
            uo = User(name=name, 
                      uid=uid)
            
            ''' Additional garbage error checking '''
            # set password if provided
            if password is not None:
                uo.set_password(password)
            # convert to date type
            if dob is not None:
                try:
                    uo.dob = datetime.strptime(dob, '%m-%d-%Y').date()
                except:
                    return {'message': f'Date of birth format error {dob}, must be mm-dd-yyyy'}, 210
            
            ''' #2: Key Code block to add user to database '''
            # create user in database
            user = uo.create()
            # success returns json of user
            if user:
                return jsonify(user.read())
            # failure returns error
            return {'message': f'Processed {name}, either a format error or User ID {uid} is duplicate'}, 210

    class _Read(Resource):
        def get(self):
            users = User.query.all()    # read/extract all users from database
            json_ready = [user.read() for user in users]  # prepare output in json
            return jsonify(json_ready)  # jsonify creates Flask response object, more specific to APIs than json.dumps

    # building RESTapi endpoint
    api.add_resource(_Create, '/create')
    api.add_resource(_Read, '/')
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
/home/trey-dev/Fastpage-setup-9/_notebooks/2023-01-22-control.ipynb Cell 1 in <cell line: 1>()
----> <a href='vscode-notebook-cell://wsl%2Bubuntu/home/trey-dev/Fastpage-setup-9/_notebooks/2023-01-22-control.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a> from flask import Blueprint, request, jsonify
      <a href='vscode-notebook-cell://wsl%2Bubuntu/home/trey-dev/Fastpage-setup-9/_notebooks/2023-01-22-control.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=1'>2</a> from flask_restful import Api, Resource # used for REST API building
      <a href='vscode-notebook-cell://wsl%2Bubuntu/home/trey-dev/Fastpage-setup-9/_notebooks/2023-01-22-control.ipynb#W0sdnNjb2RlLXJlbW90ZQ%3D%3D?line=2'>3</a> from datetime import datetime

ModuleNotFoundError: No module named 'flask'