def list_posts(request): if request.method == "GET": request_data = request.GET.dict() required_data = ["user"] optional = intersection(request=request_data, values=["limit", "order", "since"]) try: choose_required(data=request_data, required=required_data) posts_l = views.posts_list(entity="user", params=optional, identifier=request_data["user"], related=[]) except Exception as e: return HttpResponse(json.dumps({ "code": 1, "response": (e.message) }), content_type='application/json') return HttpResponse(json.dumps({ "code": 0, "response": posts_l }), content_type='application/json') else: return HttpResponse(status=405)
def create(request): if request.method == "POST": request_data = json.loads(request.body) required_data = [ "forum", "title", "isClosed", "user", "date", "message", "slug" ] optional = intersection(request=request_data, values=["isDeleted"]) try: choose_required(data=request_data, required=required_data) forum = request_data["forum"] title = request_data["title"] isClosed = request_data["isClosed"] user = request_data["user"] date = request_data["date"] message = request_data["message"] slug = request_data["slug"] DBconnector.exist(entity="Users", identifier="email", value=user) DBconnector.exist(entity="Forums", identifier="short_name", value=forum) isDeleted = 0 if "isDeleted" in optional: isDeleted = optional["isDeleted"] thread = DBconnector.select_query( 'SELECT date, forum, id, isClosed, isDeleted, message, slug, title, user, dislikes, likes, points, posts ' \ 'FROM Threads WHERE slug = %s', (slug, )) if len(thread) == 0: DBconnector.update_query('INSERT INTO Threads (forum, title, isClosed, user, date, message, slug, isDeleted) ' \ 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s)', (forum, title, isClosed, user, date, message, slug, isDeleted, )) thread = DBconnector.select_query('SELECT date, forum, id, isClosed, isDeleted, message, slug, title, user, dislikes, likes, points, posts ' \ 'FROM Threads WHERE slug = %s', (slug, )) response = views.thread_format(thread) del response["dislikes"] del response["likes"] del response["points"] del response["posts"] except Exception as e: return HttpResponse(json.dumps({ "code": 1, "response": (e.message) }), content_type='application/json') return HttpResponse(json.dumps({ "code": 0, "response": response }), content_type='application/json') else: return HttpResponse(status=405)
def list_posts(request): if request.method == "GET": request_data = request.GET.dict() required_data = ["thread"] entity = "thread" optional = intersection(request=request_data, values=["limit", "order", "since"]) try: choose_required(data=request_data, required=required_data) p_list = views.posts_list(entity=entity, params=optional, identifier=request_data["thread"], related=[]) except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": p_list}), content_type='application/json') else: return HttpResponse(status=405)
def list_users(request): if request.method == "GET": request_data = request.GET.dict() required_data = ["forum"] optional = intersection(request=request_data, values=["limit", "order", "since_id"]) try: choose_required(data=request_data, required=required_data) users_list = views.l_users(request_data["forum"], optional) except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": users_list}), content_type='application/json') else: return HttpResponse(status=405)
def create(request): if request.method == "POST": request_data = json.loads(request.body) required_data = ["forum", "title", "isClosed", "user", "date", "message", "slug"] optional = intersection(request=request_data, values=["isDeleted"]) try: choose_required(data=request_data, required=required_data) forum = request_data["forum"] title = request_data["title"] isClosed = request_data["isClosed"] user = request_data["user"] date = request_data["date"] message = request_data["message"] slug = request_data["slug"] DBconnector.exist(entity="Users", identifier="email", value=user) DBconnector.exist(entity="Forums", identifier="short_name", value=forum) isDeleted = 0 if "isDeleted" in optional: isDeleted = optional["isDeleted"] thread = DBconnector.select_query( 'SELECT date, forum, id, isClosed, isDeleted, message, slug, title, user, dislikes, likes, points, posts ' \ 'FROM Threads WHERE slug = %s', (slug, )) if len(thread) == 0: DBconnector.update_query('INSERT INTO Threads (forum, title, isClosed, user, date, message, slug, isDeleted) ' \ 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s)', (forum, title, isClosed, user, date, message, slug, isDeleted, )) thread = DBconnector.select_query('SELECT date, forum, id, isClosed, isDeleted, message, slug, title, user, dislikes, likes, points, posts ' \ 'FROM Threads WHERE slug = %s', (slug, )) response = views.thread_format(thread) del response["dislikes"] del response["likes"] del response["points"] del response["posts"] except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": response}), content_type='application/json') else: return HttpResponse(status=405)
def create_user(request): if request.method == "POST": request_data = json.loads(request.body) required_data = ["email", "username", "name", "about"] optional = intersection(request=request_data, values=["isAnonymous"]) try: choose_required(data=request_data, required=required_data) isAnonymous = 0 if "isAnonymous" in optional: isAnonymous = optional["isAnonymous"] DBconnector.update_query( "INSERT INTO Users (email, about, name, username, isAnonymous) VALUES (%s, %s, %s, %s, %s)", ( request_data["email"], request_data["about"], request_data["name"], request_data["username"], isAnonymous, )) user = DBconnector.select_query( 'SELECT email, about, isAnonymous, id, name, username FROM Users WHERE email = %s', (request_data["email"], )) except Exception as e: return HttpResponse(json.dumps({ "code": 1, "response": (e.message) }), content_type='application/json') return HttpResponse(json.dumps({ "code": 0, "response": views.user_format(user) }), content_type='application/json') else: return HttpResponse(status=405)
def post_list(request): if request.method == "GET": request_data = request.GET.dict() try: identifier = request_data["forum"] entity = "forum" except KeyError: try: identifier = request_data["thread"] entity = "thread" except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') optional = intersection(request=request_data, values=["limit", "order", "since"]) try: p_list = views.posts_list(entity=entity, params=optional, identifier=identifier, related=[]) except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": p_list}), content_type='application/json') else: return HttpResponse(status=405)
def thread_list(request): if request.method == "GET": request_data = request.GET.dict() try: identifier = request_data["forum"] entity = "forum" except KeyError: try: identifier = request_data["user"] entity = "user" except KeyError: return HttpResponse(json.dumps({"code": 1, "response": "Any methods?"}), content_type='application/json') optional = intersection(request=request_data, values=["limit", "order", "since"]) try: t_list = views.threads_list(entity=entity, identifier=identifier, related=[], params=optional) except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": t_list}), content_type='application/json') else: return HttpResponse(status=405)
def list_following(request): if request.method == "GET": request_data = request.GET.dict() required_data = ["user"] follow_param = intersection(request=request_data, values=["limit", "order", "since_id"]) try: choose_required(data=request_data, required=required_data) query = "SELECT followee FROM Followers JOIN Users ON Users.email = Followers.followee WHERE follower = %s " if "since_id" in follow_param: query += " AND Users.id >= " + str(follow_param["since_id"]) if "order" in follow_param: query += " ORDER BY Users.name " + follow_param["order"] else: query += " ORDER BY Users.name DESC " if "limit" in follow_param: query += " LIMIT " + str(follow_param["limit"]) following_tuple = DBconnector.select_query( query=query, params=(request_data["user"], )) following_list = [] for id in following_tuple: id = id[0] following_list.append(views.detail_user(email=id)) except Exception as e: return HttpResponse(json.dumps({ "code": 1, "response": (e.message) }), content_type='application/json') return HttpResponse(json.dumps({ "code": 0, "response": following_list }), content_type='application/json') else: return HttpResponse(status=405)
def list_users(request): if request.method == "GET": request_data = request.GET.dict() required_data = ["forum"] optional = intersection(request=request_data, values=["limit", "order", "since_id"]) try: choose_required(data=request_data, required=required_data) users_list = views.l_users(request_data["forum"], optional) except Exception as e: return HttpResponse(json.dumps({ "code": 1, "response": (e.message) }), content_type='application/json') return HttpResponse(json.dumps({ "code": 0, "response": users_list }), content_type='application/json') else: return HttpResponse(status=405)
def create(request): if request.method == "POST": request_data = json.loads(request.body) required_data = ["user", "forum", "thread", "message", "date"] optional_data = ["parent", "isApproved", "isHighlighted", "isEdited", "isSpam", "isDeleted"] optional = intersection(request=request_data, values=optional_data) try: choose_required(data=request_data, required=required_data) date = request_data["date"] thread = request_data["thread"] message = request_data["message"] user = request_data["user"] forum = request_data["forum"] DBconnector.exist(entity="Threads", identifier="id", value=thread) DBconnector.exist(entity="Forums", identifier="short_name", value=forum) DBconnector.exist(entity="Users", identifier="email", value=user) isTread = DBconnector.select_query( "SELECT Threads.id FROM Threads JOIN Forums ON Threads.forum = Forums.short_name " \ "WHERE Threads.forum = %s AND Threads.id = %s", (forum, thread, )) if len(isTread) == 0: raise Exception("no thread with id = " + str(thread) + " in forum " + forum) if "parent" in optional: isPost = DBconnector.select_query("SELECT Posts.id FROM Posts JOIN Threads ON Threads.id = Posts.thread " "WHERE Posts.id = %s AND Threads.id = %s", (optional["parent"], thread, )) if len(isPost) == 0: raise Exception("No post with id = " + optional["parent"]) update_thread_posts = "UPDATE Threads SET posts = posts + 1 WHERE id = %s" query = "INSERT INTO Posts (message, user, forum, thread, date" values = "(%s, %s, %s, %s, %s" parameters = [message, user, forum, thread, date] for param in optional: query += ", " + param values += ", %s" parameters.append(optional[param]) query += ") VALUES " + values + ")" DBconnector.update_query(update_thread_posts, (thread, )) post_id = DBconnector.update_query(query, parameters) post = DBconnector.select_query("SELECT date, dislikes, forum, id, isApproved, isDeleted, isEdited, " \ "isHighlighted, isSpam, likes, message, parent, points, thread, user " \ "FROM Posts WHERE id = %s", (post_id, )) post = views.post_format(post) del post["dislikes"] del post["likes"] del post["parent"] del post["points"] except Exception as e: return HttpResponse(json.dumps({"code": 1, "response": (e.message)}), content_type='application/json') return HttpResponse(json.dumps({"code": 0, "response": post}), content_type='application/json') else: return HttpResponse(status=405)