From b1985c081812a71a53c62a98776640f751392ba5 Mon Sep 17 00:00:00 2001
From: "Ethan Clay (Student)"
 <ethan2.clay@live.uwe.ac.uk@csctcloud.prxhn32zsyjupl12zde3wlfkch.cwx.internal.cloudapp.net>
Date: Fri, 1 Nov 2024 11:43:09 +0000
Subject: [PATCH] Add create user endpoint

---
 app/api/routes.py                             | 19 +++++++++++++++++++
 app/models/user.py                            | 12 ++++++++----
 .../ac9d4555724d_add_api_token_and_expiry.py  |  2 +-
 3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/app/api/routes.py b/app/api/routes.py
index 402e977..37e476e 100644
--- a/app/api/routes.py
+++ b/app/api/routes.py
@@ -22,3 +22,22 @@ def get_user_by_id(id):
     except Exception as e:
         return jsonify({'error': str(e)}), 500
 
+@bp.route('/user/create', methods=['GET'])
+def create_user():
+    try:
+        result = User.create_user('ethan_root', 'ethan2.clay@live.uwe.ac.uk', 'password1234', 1)
+
+        if result is None:
+            return jsonify({'error': 'User not found'}), 404
+        
+        user_data = {
+            'id': result.user_id,
+            'username': result.username,
+            'email': result.email
+        }
+        return jsonify(user_data), 200
+    
+    #If something falls over throw nice error for debugging, will change for admin only users to see errors otherwise throw generic 500
+    except Exception as e:
+        return jsonify({'error': str(e)}), 500
+
diff --git a/app/models/user.py b/app/models/user.py
index e4e8adc..e319fdf 100644
--- a/app/models/user.py
+++ b/app/models/user.py
@@ -6,12 +6,16 @@ class User(db.Model):
     __tablename__ = 'users'
 
     user_id = db.Column(db.Integer, primary_key=True)
-    username = db.Column(db.String(150), nullable=False, unique=True)
-    email = db.Column(db.String(150), nullable=False, unique=True)
+    username = db.Column(db.String(255), nullable=False, unique=True)
+    email = db.Column(db.String(255), nullable=False, unique=True)
+    password = db.Column(db.String(255), nullable=False)
+    role_id = db.Column(db.SmallInteger(), nullable=False)
+    api_token = db.Column(db.String(255), nullable=True, unique=True)
+    token_expiry = db.Column(db.DateTime(), nullable=True)
 
     @classmethod
-    def create_user(cls, username, email):
-        new_user = cls(username=username, email=email)
+    def create_user(cls, username, email, password, role_id):
+        new_user = cls(username=username, email=email, password=password, role_id=role_id)
         db.session.add(new_user)
         db.session.commit()
         return new_user
diff --git a/migrations/versions/ac9d4555724d_add_api_token_and_expiry.py b/migrations/versions/ac9d4555724d_add_api_token_and_expiry.py
index f6db686..f6b7814 100644
--- a/migrations/versions/ac9d4555724d_add_api_token_and_expiry.py
+++ b/migrations/versions/ac9d4555724d_add_api_token_and_expiry.py
@@ -24,6 +24,6 @@ def upgrade():
               sa.Column('email', sa.String(255), nullable=False, unique=True),
               sa.Column('password', sa.String(255), nullable=False),
               sa.Column('role_id', sa.SmallInteger(), nullable=False, server_default='1'), #Standard user permission level
-              sa.Column('api_token', sa.String(255), nullable=True),
+              sa.Column('api_token', sa.String(255), nullable=True, unique=True),
               sa.Column('token_expiry', sa.DateTime(), nullable=True)
        )
\ No newline at end of file
-- 
GitLab