Follow users

This commit is contained in:
Gergely Polonkai 2018-07-09 08:33:04 +02:00
parent 4cbebb9c5a
commit ba1a660b1a
3 changed files with 41 additions and 0 deletions

View File

@ -266,5 +266,26 @@ class CalendarSocialApp(Flask):
return render_template('profile-details.html', profile=profile)
@staticmethod
@route('/profile/@<string:username>/follow')
def follow_user(username):
"""View for following a user
"""
from .models import db, Profile, User, UserFollow
profile = current_user.profile
if profile is None:
abort(404)
if profile.user != current_user:
follow = UserFollow(follower_id=current_user.profile,
followed_id=profile,
accepted_at=datetime.utcnow())
db.session.add(follow)
db.session.commit()
return redirect(url_for('display_profile', username=username))
app = CalendarSocialApp(__name__)

View File

@ -395,3 +395,20 @@ class AuditLog(db.Model):
message = f'Audit: [{ip}] [{user.id}] ' + cls.get_message(log_type, user=user.username)
logger.info(message)
class UserFollow(db.Model):
"""Database model for user follows
"""
#: The ID of the profile that is following the other
follower_id = db.Column(db.Integer(), db.ForeignKey('profiles.id'), primary_key=True)
#: The ID of the profile being followed
followed_id = db.Column(db.Integer(), db.ForeignKey('profiles.id'), primary_key=True)
#: The timestamp when the follow was initiated
initiated_at = db.Column(db.DateTime(), default=datetime.utcnow, nullable=False)
#: The timestamp when the follow was accepted
accepted_at = db.Column(db.DateTime(), nullable=True)

View File

@ -5,4 +5,7 @@
{{ profile.name }}
<small>@{{ profile.user.username}}</small>
</h1>
{% if profile.user != current_user %}
<a href="{{ url_for('follow_user', username=profile.user.username) }}">{% trans %}Follow{% endtrans %}
{% endif %}
{% endblock content %}