Skip to content

Commit

Permalink
comments
Browse files Browse the repository at this point in the history
  • Loading branch information
fabi20750 committed Sep 22, 2024
1 parent 02131d6 commit 08e3076
Show file tree
Hide file tree
Showing 17 changed files with 56 additions and 236 deletions.
10 changes: 6 additions & 4 deletions app/admin/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
from flask_security import auth_required, current_user
from app import db
from app.admin import bp
from app.models import Story, Task, Answer, Hint, ReadQuestion, User, Role # Ensure User and Role are imported
from sqlalchemy.orm import joinedload, subqueryload # Import subqueryload

from app.models import Story, Task, Answer, Hint, ReadQuestion, User, Role
from sqlalchemy.orm import joinedload, subqueryload
#Standard Route for Admins
@bp.route('/', methods=['GET', 'POST'])
@auth_required()
def admin():
Expand Down Expand Up @@ -44,6 +44,7 @@ def admin():

return render_template('admin/admin.html', stories=stories, users=users) # Pass both stories and users to the template

#Route for Editing Stories
@bp.route('/edit_story/<int:story_id>', methods=['GET', 'POST'])
@auth_required()
def edit_story(story_id):
Expand Down Expand Up @@ -71,7 +72,8 @@ def edit_story(story_id):

return render_template('admin/edit_story.html', story=story, tasks=tasks)

@bp.route('/add_story', methods=['GET', 'POST']) # Neue Route zum Hinzufügen von Stories
#Route for Adding Stories
@bp.route('/add_story', methods=['GET', 'POST'])
@auth_required()
def add_story():
if request.method == 'POST':
Expand Down
6 changes: 3 additions & 3 deletions app/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
from flask_restful import Api

bp = Blueprint('api', __name__)
api = Api(bp) # Create the Api object here
api = Api(bp) #

def register_routes():
from . import routes # Import routes here to avoid circular import
from . import routes
# Register resources here if needed

# Call this function in your app initialization
# app initialization
register_routes()
7 changes: 5 additions & 2 deletions app/api/routes.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from flask import jsonify
from flask_restful import Resource
from app.models import Story, Task, User, UserAnswer
from app.api import api, bp # Ensure both api and bp are imported
from app import db # Import db from your main app module
from app.api import api, bp
from app import db

#API Routes for Stories
class StoryListResource(Resource):
def get(self):
stories = Story.query.filter_by(is_active=True).all()
Expand All @@ -13,6 +14,7 @@ def get(self):
'description': story.description
} for story in stories])

#API Routes for Stories
class StoryDetailResource(Resource):
def get(self, story_id):
story = Story.query.filter_by(id=story_id, is_active=True).first_or_404()
Expand All @@ -32,6 +34,7 @@ def get(self, story_id):
api.add_resource(StoryListResource, '/stories')
api.add_resource(StoryDetailResource, '/stories/<int:story_id>')

#API Routes for Healthcheck
@bp.route('/healthcheck')
def healthcheck():
return jsonify({"message": "API is working"})
1 change: 1 addition & 0 deletions app/forms/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from flask_security.forms import RegisterForm
from wtforms import SelectField, SubmitField

#Form for Setup
class SetupForm(RegisterForm):
submit = SubmitField(_('Submit'))
adminLanguage = SelectField(_('Select Your Language'), coerce=int)
Expand Down
1 change: 1 addition & 0 deletions app/forms/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from wtforms import EmailField, SelectField, StringField, SubmitField
from wtforms.validators import Email, Length, Optional

#Form for Editing Profile
class EditProfileForm(FlaskForm):
firstName = StringField(_('First Name'), validators=[Length(max=255)]) # Max length of db-column
lastName = StringField(_('Last Name'), validators=[Length(max=255)]) # Max length of db-column
Expand Down
2 changes: 2 additions & 0 deletions app/forms/story.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from wtforms import IntegerField, StringField, SubmitField
from wtforms.validators import DataRequired, Email

#Form for Registering School
class RegisterSchoolForm(FlaskForm):
school_name = StringField('School Name', validators=[DataRequired()])
teacher_name = StringField('Teacher Name', validators=[DataRequired()])
Expand All @@ -11,6 +12,7 @@ class RegisterSchoolForm(FlaskForm):
registration_code = StringField('Registration Code', validators=[DataRequired()])
submit = SubmitField('Generate Code')

#Form for Registration Code
class RegistrationCodeForm(FlaskForm):
registration_code = StringField('Registration Code', validators=[DataRequired()])
submit = SubmitField('Submit')
2 changes: 2 additions & 0 deletions app/main/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from app.models import Language, School, User, Story # Stellen Sie sicher, dass das Story-Modell importiert wird
from .setup import create_languages, create_roles, create_stories, create_tasks, create_users

#Standard Route for Users
@bp.route('/')
def index():
# Redirect to setup page if no users are in database
Expand All @@ -18,6 +19,7 @@ def index():
return redirect(url_for('main.setup'), code=307)
return render_template('main/index.html')

#Route for Setup
@bp.route('/setup/', methods=['GET', 'POST'])
def setup():
# Redirect to homepage if one or more users are already in the database
Expand Down
5 changes: 5 additions & 0 deletions app/main/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
from app import db
from app.models import Language, Profile, Role, Story, Task, Answer

#Function to create languages
def create_languages():
for l in current_app.config['LANGUAGES']:
db.session.add(Language(name=l['name'], isoCode=l['isoCode'], icon=l['icon']))
db.session.commit()
return True

#Function to create roles
def create_roles():
for r in current_app.config['USER_ROLES']:
current_app.security.datastore.find_or_create_role(
Expand All @@ -20,6 +22,7 @@ def create_roles():
db.session.commit()
return True

#Function to create users
def create_users(adminUsername, adminEmail, adminPassword, adminLanguage):
for r in Role.query.all():
if r.name == 'Admin':
Expand All @@ -43,6 +46,7 @@ def create_users(adminUsername, adminEmail, adminPassword, adminLanguage):
db.session.commit()
return True

#Function to create stories
def create_stories():
# Clear existing stories
Story.query.delete()
Expand All @@ -69,6 +73,7 @@ def create_stories():
stories = Story.query.all()
return stories

#Function to create tasks
def create_tasks():
# Clear existing tasks
Task.query.delete()
Expand Down
2 changes: 2 additions & 0 deletions app/models/main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from app import db

#Model for Language
class Language(db.Model):
__tablename__ = 'language'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -12,6 +13,7 @@ class Language(db.Model):
def __repr__(self):
return '<Language {}'.format(self.name)

#Model for Tenant
class Tenant(db.Model):
__tablename__ = 'tenant'
id = db.Column(db.Integer, primary_key=True)
Expand Down
1 change: 1 addition & 0 deletions app/models/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .main import Language
from .security import User

#Model for Profile
class Profile(db.Model):
__tablename__ = 'profile'
id = db.Column(db.Integer, primary_key=True)
Expand Down
8 changes: 2 additions & 6 deletions app/models/security.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,18 @@
# Required for FsModels class in fsqla to know about Flask SQL-Alchemy db object
fsqla.FsModels.set_db_info(db)

#Model for User
class User(fsqla.FsUserMixin, db.Model):
__tablename__ = 'user'
total_points = db.Column(db.Integer, default=0)

def __repr__(self):
return '<User {}>'.format(self.username)

#Model for Role
class Role(fsqla.FsRoleMixin, db.Model):
__tablename__ = 'role'


def __repr__(self):
return '<Role {}>'.format(self.name)

# class WebAuthn(fsqla.FsWebAuthnMixin, db.Model):
# __tablename__ = 'webauthn'

# def __repr__(self):
# return '<WebAuthn {}>'.format(self.name)
14 changes: 9 additions & 5 deletions app/models/story.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
db.Column('requirement_id', db.Integer, db.ForeignKey('hint.id', ondelete='CASCADE'))
)


#Model for School
class School(db.Model):
__tablename__ = 'school'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -42,6 +42,7 @@ class School(db.Model):
createdAt = db.Column(db.DateTime)
updatedAt = db.Column(db.DateTime)

#Model for Story
class Story(db.Model):
__tablename__ = 'story'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -52,7 +53,7 @@ class Story(db.Model):

def __repr__(self):
return '<Story {}>'.format(self.name)

class Task(db.Model):
__tablename__ = 'task'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -71,11 +72,11 @@ class Task(db.Model):

answers = db.relationship('Answer', back_populates='task', lazy='dynamic')
hints = db.relationship('Hint', back_populates='task', lazy='dynamic')
# Remove the resource relationship from here


def __repr__(self):
return '<Task {}>'.format(self.name)

# Class for Answer
class Answer(db.Model):
__tablename__ = 'answer'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -89,7 +90,8 @@ class Answer(db.Model):

def __repr__(self):
return '<Answer {}>'.format(self.text)


#Model for UserAnswer
class UserAnswer(db.Model):
__tablename__ = 'user_answer'
id = db.Column(db.Integer, primary_key=True)
Expand Down Expand Up @@ -124,6 +126,7 @@ class Resource(db.Model):
def __repr__(self):
return '<Resource {}>'.format(self.name)

#Model for Hint not used at the moment
class Hint(db.Model):
__tablename__ = 'hint'
id = db.Column(db.Integer, primary_key=True)
Expand All @@ -137,6 +140,7 @@ class Hint(db.Model):
def __repr__(self):
return '<Hint {}>'.format(self.hint)

#Model for Tag not used at the moment
class Tag(db.Model):
__tablename__ = 'tag'
id = db.Column(db.Integer, primary_key=True)
Expand Down
4 changes: 4 additions & 0 deletions app/profile/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from app.models import Language, Profile
from app.profile import bp

#Route for Profile
@bp.route('/')
@auth_required()
def profile():
Expand All @@ -15,10 +16,13 @@ def profile():
points = current_user.total_points
return render_template('profile/index.html', profile=profile, language=language, points=points)

#Route for Edit Profile
@bp.route('/edit/', methods=['GET', 'POST'])
@auth_required()
def edit():
#Get the profile for the current user
profile = db.first_or_404(Profile.query.filter_by(userId=current_user.id))
#Create the form for the profile
form = EditProfileForm(formdata=request.form, obj=profile, data={'email': current_user.email})
form.languageId.choices = [(l.id, l.name) for l in Language.query.all()]
if form.validate_on_submit():
Expand Down
Loading

0 comments on commit 08e3076

Please sign in to comment.