Skip to content

Commit

Permalink
Completing Issue: I have introduced joining a group channel based on …
Browse files Browse the repository at this point in the history
…a key to join
  • Loading branch information
SirGankalot committed May 3, 2024
1 parent 01dab21 commit 9036363
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 33 deletions.
28 changes: 14 additions & 14 deletions service/src/FlaskWebsite/website/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,35 @@
from flask_login import UserMixin
from sqlalchemy.sql import func

NoteGroup = db.Table('NoteGroup',
db.Column('id', db.Integer, primary_key=True),
db.Column('name', db.String(150)),
db.Column('NoteId', db.Integer, db.ForeignKey('Note.id')),
db.Column('UserId', db.Integer, db.ForeignKey('User.id')),
db.Column('endDate', db.Date),
db.Column('group_key', db.String(255)))
# Association table for the many-to-many relationship between users and groups
user_group_association = db.Table('user_group_association',
db.Column('user_id', db.Integer, db.ForeignKey('User.id')),
db.Column('group_id', db.Integer, db.ForeignKey('NoteGroup.id'))
)

class NoteGroup(db.Model):
__tablename__ = 'NoteGroup'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(150))
group_key = db.Column(db.String(255))
# Define the relationship with User using the association table
users = db.relationship('User', secondary=user_group_association, backref=db.backref('groups', lazy='dynamic'))

class Note(db.Model):
__tablename__ = 'Note'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
data = db.Column(db.String(10000))
date = db.Column(db.DateTime(timezone=True), default=func.now())
description = db.Column(db.Text)
owner_id = db.Column(db.Integer, db.ForeignKey('User.id'))
users = db.relationship('User', secondary=NoteGroup, backref='Note')

class User(db.Model, UserMixin):
__tablename__ = 'User'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(150), unique=True)
password = db.Column(db.String(150))
first_name = db.Column(db.String(150))
name = db.Column(db.String)
value = db.Column(db.String)
notes_id = db.relationship('Note')
notes = db.relationship('Note', secondary=NoteGroup, backref='User')
notes = db.relationship('Note', backref='owner', lazy=True)




32 changes: 32 additions & 0 deletions service/src/FlaskWebsite/website/models_old.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from . import db
from flask_login import UserMixin
from sqlalchemy.sql import func

NoteGroup = db.Table('NoteGroup',
db.Column('id', db.Integer, primary_key=True),
db.Column('name', db.String(150)),
db.Column('UserId', db.Integer, db.ForeignKey('User.id')),
db.Column('NoteId', db.Integer, db.ForeignKey('Note.id')),
db.Column('endDate', db.Date),
db.Column('group_key', db.String(255)))

class Note(db.Model):
__tablename__ = 'Note'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
data = db.Column(db.String(10000))
date = db.Column(db.DateTime(timezone=True), default=func.now())
description = db.Column(db.Text)
owner_id = db.Column(db.Integer, db.ForeignKey('User.id'))
users = db.relationship('User', secondary=NoteGroup, backref='Note')

class User(db.Model, UserMixin):
__tablename__ = 'User'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(150), unique=True)
password = db.Column(db.String(150))
first_name = db.Column(db.String(150))
name = db.Column(db.String)
value = db.Column(db.String)
notes_id = db.relationship('Note')
notes = db.relationship('Note', secondary=NoteGroup, backref='User')
56 changes: 37 additions & 19 deletions service/src/FlaskWebsite/website/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@
from flask_login import login_required, current_user
from .models import Note
from .models import NoteGroup
from .models import User
from .models import user_group_association
from . import db
import json



views = Blueprint('views', __name__)


#works
@views.route('/', methods=['GET', 'POST'])
@login_required
def home():
Expand All @@ -26,6 +28,11 @@ def home():
n = Note.query
return render_template("home.html", user=current_user, notes=n)





#works
@views.route('/creategroup', methods=['GET', 'POST'])
@login_required
def group_headfunction():
Expand All @@ -47,42 +54,49 @@ def group_headfunction():
flash('No groups found.', category='error')
return render_template("groups.html", user=current_user, groups=[])
# Prepare a list of dictionaries where each dictionary represents a row with column names as keys and values as values
groups = [{column.name: getattr(note_group, column.name) for column in NoteGroup.columns} for note_group in note_groups]
groups = [{column.name: getattr(note_group, column.name) for column in NoteGroup.__table__.columns} for note_group in note_groups]
return render_template("groups.html", user=current_user, groups=groups)

#works
def creategroup(group_name, group_key):
if request.method == 'POST':
group_name = request.form.get('group_name')
if len(group_name) < 1:
flash('Group Name is too short!', category='error')
else:
# Create a new NoteGroup instance and add it to the session
new_group = NoteGroup.insert().values(name=group_name, group_key=group_key, UserId=current_user.id)
db.session.execute(new_group)
# Create a new NoteGroup instance
new_group = NoteGroup(name=group_name, group_key=group_key)

# Add the current user to the group
new_group.users.append(current_user)

# Add the group to the session and commit
db.session.add(new_group)
db.session.commit()
flash('Group added!', category='success')

#Show all the groups on the page

# Retrieve all rows from the NoteGroup table
note_groups = db.session.query(NoteGroup).all()
# Prepare a list of dictionaries where each dictionary represents a row with column names as keys and values as values
groups = [{column.name: getattr(note_group, column.name) for column in NoteGroup.columns} for note_group in note_groups]
groups = [{column.name: getattr(note_group, column.name) for column in NoteGroup.__table__.columns} for note_group in note_groups]
return render_template("groups.html", user=current_user, groups=groups)

#does not work
def join_group(group_id, key):
print("Joining group")
group = db.session.query(NoteGroup).filter_by(id=group_id).all()
group = db.session.query(NoteGroup).filter_by(id=group_id).first()
if group:
if key == group[0].group_key:
#NoteGroup.insert().values(id=group[0].id, name=group[0]['name'], NoteId = group[0].NoteId,UserId=current_user.id, endDate=group[0].endDate, group_key=group[0]['group_key'])
id = group[0][0]
name = group[0][1]
NoteId = group[0][2]
if key == group.group_key:
print("drin")
id = group.id
name = group.name
UserId = current_user.id
endDate = group[0][4]
group_key = group[0][5]
print(id, name, NoteId, UserId, endDate, group_key)
group_key = group.group_key
print(id, name, UserId, group_key)

# Add the current user to the group
join = NoteGroup.insert().values(name=name, group_key=group_key, UserId=current_user.id)
join = user_group_association.insert().values(user_id=UserId, group_id=id)
db.session.execute(join)
db.session.commit()
flash('You have joined the group!', category='success')
Expand All @@ -92,12 +106,15 @@ def join_group(group_id, key):
flash('Group not found.', category='error')
return redirect(url_for('views.home'))

#works
@views.route('/creategroup/<int:group_id>', methods=['GET', 'POST'])
@login_required
def group_page(group_id):
group_allusers = db.session.query(NoteGroup).filter_by(id=group_id).all()
#id unique so only one object will be returned
group_allusers = db.session.query(NoteGroup).filter_by(id=group_id).first()

if group_allusers:
if any(one_user.UserId == current_user.id for one_user in group_allusers):
if any(one_user == current_user for one_user in group_allusers.users):
# Retrieve all notes associated with the group
#notes = db.session.query(Note).filter_by(NoteGroup.id = Note).all()
return render_template("group_page.html", user=current_user, group=group_allusers)
Expand Down Expand Up @@ -126,6 +143,7 @@ def group_page(group_id):

#@views.route('/creategroup/<int:group_id>/addnote', methods=['POST'])

#works
@views.route('/delete-note', methods=['POST'])
def delete_note():
note = json.loads(request.data) # this function expects a JSON from the INDEX.js file
Expand Down

0 comments on commit 9036363

Please sign in to comment.