mirror of
https://github.com/Michatec/MiniFaceBook.git
synced 2026-03-31 23:46:30 +02:00
Files
This commit is contained in:
92
routes/friends.py
Normal file
92
routes/friends.py
Normal file
@@ -0,0 +1,92 @@
|
||||
from flask import Blueprint, redirect, url_for, flash, render_template
|
||||
from flask_login import login_required, current_user
|
||||
from models import db, Notification, Event, User, Friendship, Reward
|
||||
from flask_babel import gettext as _
|
||||
|
||||
friends_bp = Blueprint('friend', __name__)
|
||||
|
||||
@friends_bp.route('/add_friend/<int:user_id>', methods=['POST'])
|
||||
@login_required
|
||||
def add_friend(user_id):
|
||||
if user_id == current_user.id:
|
||||
flash(_('You cannot add yourself as a friend.'), 'warning')
|
||||
return redirect(url_for('user.users'))
|
||||
existing = db.session.query(Friendship).filter_by(requester_id=current_user.id, receiver_id=user_id).first()
|
||||
if existing:
|
||||
flash(_('Friend request already sent.'), 'info')
|
||||
else:
|
||||
friendship = Friendship(requester_id=current_user.id, receiver_id=user_id)
|
||||
db.session.add(friendship)
|
||||
db.session.commit()
|
||||
friend = db.session.get(User, user_id)
|
||||
event = Event(message=_(f"{current_user.username} sent a friend request to {friend.username}."))
|
||||
db.session.add(event)
|
||||
db.session.commit()
|
||||
notif = Notification(
|
||||
user_id=user_id,
|
||||
message=_(f"You have received a friend request from {current_user.username}.")
|
||||
)
|
||||
db.session.add(notif)
|
||||
db.session.commit()
|
||||
flash(_('Friend request sent!'), 'success')
|
||||
return redirect(url_for('user.users'))
|
||||
|
||||
@friends_bp.route('/accept_friend/<int:friendship_id>', methods=['POST'])
|
||||
@login_required
|
||||
def accept_friend(friendship_id):
|
||||
friendship = db.session.get(Friendship, friendship_id)
|
||||
if friendship and friendship.receiver_id == current_user.id:
|
||||
friendship.status = 'accepted'
|
||||
db.session.commit()
|
||||
friend = db.session.get(User, friendship.requester_id)
|
||||
event = Event(message=_(f"{current_user.username} und {friend.username} sind jetzt Freunde."))
|
||||
db.session.add(event)
|
||||
db.session.add(Reward(user_id=current_user.id, type='friendship', points=5))
|
||||
db.session.add(Reward(user_id=friendship.requester_id, type='friendship', points=5))
|
||||
db.session.commit()
|
||||
flash(_('Friend request accepted!'), 'success')
|
||||
else:
|
||||
flash(_('Invalid friend request.'), 'danger')
|
||||
return redirect(url_for('friend.friends'))
|
||||
|
||||
@friends_bp.route('/reject_friend/<int:friendship_id>', methods=['POST'])
|
||||
@login_required
|
||||
def reject_friend(friendship_id):
|
||||
friendship = db.session.get(Friendship, friendship_id)
|
||||
if friendship and friendship.receiver_id == current_user.id:
|
||||
friendship.status = 'rejected'
|
||||
db.session.commit()
|
||||
friend = db.session.get(User, friendship.requester_id)
|
||||
event = Event(message=_(f"{current_user.username} has rejected {friend.username}'s friend request."))
|
||||
db.session.add(event)
|
||||
db.session.commit()
|
||||
flash(_('Friend request rejected.'), 'info')
|
||||
else:
|
||||
flash(_('Invalid friend request.'), 'danger')
|
||||
return redirect(url_for('friend.friends'))
|
||||
|
||||
@friends_bp.route('/friends')
|
||||
@login_required
|
||||
def friends():
|
||||
friends = db.session.query(User).join(Friendship, ((Friendship.requester_id == User.id) | (Friendship.receiver_id == User.id)))\
|
||||
.filter(
|
||||
((Friendship.requester_id == current_user.id) | (Friendship.receiver_id == current_user.id)),
|
||||
Friendship.status == 'accepted',
|
||||
User.id != current_user.id
|
||||
).all()
|
||||
requests = db.session.query(Friendship).filter_by(receiver_id=current_user.id, status='pending').all()
|
||||
return render_template('friends.html', friends=friends, requests=requests)
|
||||
|
||||
@friends_bp.route('/remove_friend/<int:user_id>', methods=['POST'])
|
||||
@login_required
|
||||
def remove_friend(user_id):
|
||||
friendship = db.session.query(Friendship).filter(
|
||||
((Friendship.requester_id == current_user.id) & (Friendship.receiver_id == user_id)) |
|
||||
((Friendship.requester_id == user_id) & (Friendship.receiver_id == current_user.id)),
|
||||
Friendship.status == 'accepted'
|
||||
).first()
|
||||
if friendship:
|
||||
db.session.delete(friendship)
|
||||
db.session.commit()
|
||||
flash(_('Friendship ended.'), 'info')
|
||||
return redirect(url_for('friend.friends'))
|
||||
Reference in New Issue
Block a user