def post_create():

    connection = dbConnector.connect()

    params = request.json

    optional = functions.get_optional(
        params,
        ["parent",
         "isApproved",
         "isHighlighted",
         "isEdited",
         "isSpam",
         "isDeleted"]
    )

    try:
        functions.check(
            params,
            ["date",
             "thread",
             "message",
             "user",
             "forum"]
        )

        response = post.create(connection, params["date"], params["thread"], params[
                               "message"], params["user"], params["forum"], optional)

    except Exception as e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})

    connection.close()
    return json.dumps({"code": 0, "response": response})
def forum_list_users():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(params, ["since_id", "limit", "order"])
    try:
        functions.check(params, ["forum"])
        response = forum.forum_listUsers(
            connection=connection, optional=optional, forum_shortname=params["forum"][0])
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def forum_list_threads():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(params, ["since", "limit", "order"])
    related = functions.get_related(params)
    try:
        functions.check(params, ["forum"])
        response = thread.list(connection=connection, optional=optional,
                               required=params, related=related)
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def list_posts():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(
        request=params, values=["limit", "order", "since", "sort"])
    try:
        functions.check(params, ["thread"])
        response = post.posts_list(
            connection=connection, entity="thread", params=optional, identifier=params["thread"], related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def user_listFollowers():

    connection = dbConnector.connect()

    params = functions.get_json(request)

    optional = functions.get_optional(params, ["limit", "order", "since_id"])

    try:
        functions.check(params, ["user"])
        response = user.listFollowers(connection, params["user"], optional)
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def forum_list_posts():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(
        params,
        ["since",
         "limit",
         "order"]
    )
    related = functions.get_related(params)
    try:
        functions.check(params, ["forum"])
        response = post.posts_list(connection, entity="forum", params=optional, identifier=params[
                                   "forum"], related=related)
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def list_thread():

    connection = dbConnector.connect()

    params = functions.get_json(request)

    optional = functions.get_optional(
        request=params, values=["since", "limit", "order"])

    try:
        response = thread.list(connection=connection, required=params,
                               optional=optional, related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})

    connection.close()
    return json.dumps({"code": 0, "response": response})
def create_user():

    connection = dbConnector.connect()
    params = request.json

    optional = functions.get_optional(params, values=["isAnonymous"])

    try:
        functions.check(params, ["username", "about", "name", "email"])
        userr = user.create(connection, params["username"], params["about"], params[
                            "name"], params["email"], optional)
    except Exception as e:
        if e.message == "5":
            connection.close()
            return json.dumps({"code": 5, "response": e.message})
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": userr})
def create_thread():

    connection = dbConnector.connect()
    params = request.json

    optional = functions.get_optional(params, ["isDeleted"])

    try:
        functions.check(
            params, ["forum", "title", "isClosed", "user", "date", "message", "slug"])

        response = thread.create(connection, params["forum"], params["title"], params["isClosed"], params[
                                 "user"], params["date"], params["message"], params["slug"], optional)

    except Exception as e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})

    connection.close()
    return json.dumps({"code": 0, "response": response})
def post_list():
    connection = dbConnector.connect()
    content = functions.get_json(request)
    try:
        identifier = content["forum"]
        entity = "forum"
    except KeyError:
        try:
            identifier = content["thread"]
            entity = "thread"
        except Exception as e:
            connection.close()
            return json.dumps({"code": 1, "response": e.message})

    optional = functions.get_optional(
        request=content, values=["limit", "order", "since"])
    try:
        p_list = post.posts_list(
            connection=connection, entity=entity, params=optional, identifier=identifier, related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": p_list})