neelxie/flask_database

View on GitHub
app/controller/user_controller.py

Summary

Maintainability
A
0 mins
Test Coverage
"""File for the user controller."""
from flask import jsonify
from flask import request
from datetime import datetime
from flask_jwt_extended import create_access_token, get_jwt_identity
from ..utilities.validation import Valid
from ..models.model_users import (
    Base, User, UserDB, Credential)

from db.ireporter_db import DatabaseConnection


db = DatabaseConnection()


class UserController:
    """ Class for user controller."""

    user_list = UserDB()
    validator = Valid()


    def __init__(self):
        """ Class constructor for the User Controller."""
        pass

    def register_user(self):
        """ Controller logic for signup class method."""
        data = request.get_json()

        first_name = data.get("first_name")
        last_name = data.get("last_name")
        other_name = data.get("other_name")
        phone_number = data.get("phone_number")
        email = data.get("email")
        user_name = data.get("user_name")
        password = data.get("password")
        is_admin = data.get("is_admin")
        user_id = len(self.user_list.all_users)+ 1
        registered = str(datetime.now())

        # check if user data is valid if not return an error.
        error = self.validator.check_incident(
            self.validator.check_user_base(
                first_name, last_name, other_name, user_name), self.validator.check_credential(
                    phone_number, email, password, is_admin))

        # if the username or email are already registered return error.
        # exist = self.user_list.checking_user(user_name, email)

        user = db.add_user(first_name, last_name, other_name, phone_number, user_name,password, is_admin, user_id, registered)

        token = "nooooo"
        if user:
            token = create_access_token(user_id)
        if error:
            return jsonify({
                'error': error,
                "status": 400
            }), 400

        # if exist is not None: 
        #     return jsonify({
        #         "status": 401,
        #         "error": exist
        #     }), 401

        return jsonify({
            "status": 201,
            'success':[{
                'access_token': token,
                'message': f'{user_name} successfully registered'
            }]
        }), 201

    def fetch_users(self):
        """ Administrator method to retrieve all users."""

        if len(self.user_list.all_users) < 1:
            return jsonify({
                "data":[{'message':'sorry! No App users yet.'}],
                "status": 200
            }), 200
        return jsonify({
            'status': 200,
            'users': [user.to_dict() for user in self.user_list.all_users]
        }), 200

    def sign_in(self):
        """ Class method to get single user by ID."""
        login =  request.get_json()

        user_name = login.get("user_name")
        password = login.get("password")

        error = self.user_list.validate_login(user_name, password)

        if error:
            return jsonify({
                'message':error,
                "status": 403
            }), 403

        token = create_access_token(user_name)
        return jsonify({
            'message': 200,
            'Single user': [{
                'access_token': token,
                'success': f'{user_name} successfully logged in.'
            }]
        }), 200