-
Notifications
You must be signed in to change notification settings - Fork 0
/
server_helper_functions.py
72 lines (58 loc) · 2.63 KB
/
server_helper_functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from passlib.hash import argon2
import json
from sqlalchemy import desc, func
from model import connect_to_db, User, Pattern, UserLikesPattern, db
import math
def get_most_liked():
""" Returns top 5 most liked patterns"""
base_query = db.session.query(Pattern.pattern_id, Pattern.pattern_name,
Pattern.pattern_url)
most_liked = base_query.join(UserLikesPattern).group_by(Pattern.pattern_id,
Pattern.pattern_name, Pattern.pattern_url).order_by(desc(func.count(UserLikesPattern.like_id)
)).limit(5).all()
return most_liked
def get_newest():
""" Returns top 5 newest patterns"""
base_query = db.session.query(Pattern.pattern_id, Pattern.pattern_name,
Pattern.pattern_url)
newest = base_query.order_by(desc(Pattern.time_created)).limit(5).all()
return newest
def register_new_user(email, password):
""" Registers a new user in the database. Does not check if user already exists"""
user = User(email=email, password=argon2.hash(password))
db.session.add(user)
db.session.commit()
return user.user_id
def make_search_json(search_val,page, per_page=20):
""" Create a JSON with requested search information"""
patterns = db.session.query(Pattern.pattern_id, Pattern.pattern_name,
Pattern.pattern_url).filter(Pattern.pattern_name.ilike(
f'%{search_val}%')).order_by(desc(Pattern.time_created)).all()
patterns_num = len(patterns)
num_pages = math.ceil(len(patterns) / per_page)
to_show = patterns[(per_page * (page - 1)): (per_page * page)]
pattern_dict = {'patterns': to_show, 'numResults': patterns_num, 'numPages': num_pages, 'page': page}
json_dict = json.dumps(pattern_dict)
return json_dict
def unlike_pattern(user_id, pattern_id):
""" Removes a like from the DB"""
old_like = UserLikesPattern.query.filter_by(user_id=user_id, pattern_id=pattern_id).first()
db.session.delete(old_like)
db.session.commit()
def like_pattern(user_id, pattern_id):
""" Adds a like to the DB"""
new_like = UserLikesPattern(user_id=user_id, pattern_id=pattern_id)
db.session.add(new_like)
db.session.commit()
def save_new_pattern(user_id, pattern_text, pattern_name, svg_string):
""" Saves pattern SVG and adds pattern to DB"""
pattern = Pattern(user_id=user_id, pattern_text=pattern_text,
pattern_name=pattern_name)
db.session.add(pattern)
db.session.commit()
save_file = open((f'static/patternSVGs/{pattern.pattern_id}.svg'), 'w')
save_file.write(svg_string)
save_file.close()
pattern.pattern_url = (f'/static/patternSVGs/{pattern.pattern_id}.svg')
db.session.commit()
return pattern