Skip to content

Commit

Permalink
fix chat include other user
Browse files Browse the repository at this point in the history
  • Loading branch information
wuttinanhi committed Oct 31, 2022
1 parent 996833c commit 8f77979
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 7 deletions.
26 changes: 19 additions & 7 deletions chat/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,22 @@
from typing import List

from database.database import db_session
from marshmallow import fields, validate
from pagination.pagination import Pagination, PaginationOptions, PaginationSortOptions
from sqlalchemy import text
from sqlalchemy.orm.query import Query
from sqlalchemy.sql import and_, or_
from user.model import User
from user.service import UserService
from werkzeug.exceptions import InternalServerError

from chat.model import Chat, ChatHead


class ChatHistoryPaginationOptions(PaginationOptions):
from_user_id = fields.Integer(required=True, validate=validate.Range(min=1))
to_user_id = fields.Integer(required=True, validate=validate.Range(min=1))


class ChatService:
@staticmethod
def send_chat(
Expand All @@ -36,9 +42,13 @@ def send_chat(
ChatService.update_chat_head(to_user, from_user)

@staticmethod
def list_chat_history(from_user: User, to_user: User) -> List[Chat]:
def list_chat_history(opts: ChatHistoryPaginationOptions) -> List[Chat]:
try:
chat_history: Query = Chat.query.where(
from_user = UserService.find_by_id(opts.from_user_id)
to_user = UserService.find_by_id(opts.to_user_id)

query: Query = db_session.query(Chat)
query = query.where(
or_(
(
and_(
Expand All @@ -54,10 +64,12 @@ def list_chat_history(from_user: User, to_user: User) -> List[Chat]:
),
)
)
chat_history = chat_history.order_by(text("id DESC")).limit(10)
chat_history = Chat.query.select_from(chat_history).order_by(text("id ASC"))
chat_history = chat_history.all()
return chat_history

pagination = Pagination(Chat, query)
pagination.set_options(opts)
result = pagination.result()

return result
except Exception as e:
print(e)
raise InternalServerError("Failed to retrieve chat history!")
Expand Down
38 changes: 38 additions & 0 deletions example/chat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""
chat example
run:
python -m example.chat
"""
from database.database import init_db
from env_wrapper import load_env
from pagination.pagination import PaginationSortOptions
from user.service import UserService

from chat.service import ChatHistoryPaginationOptions, ChatService

# setup
load_env()
init_db()

# list chat history
from_user = UserService.find_by_id(2)
to_user = UserService.find_by_id(3)

opts = ChatHistoryPaginationOptions()
opts.page = 1
opts.limit = 20
opts.sort = PaginationSortOptions.DESC
opts.order_by = "send_date"
opts.search = ""

opts.from_user_id = from_user.id
opts.to_user_id = to_user.id


chats = ChatService.list_chat_history(opts)

for chat in chats:
print(chat)
1 change: 1 addition & 0 deletions pagination/pagination.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def create_pagination_options_from_request(request: Request):
options.page = int(data.page)
options.limit = int(data.limit)
options.order_by = data.order_by

if hasattr(data, "search"):
options.search = data.search
else:
Expand Down

0 comments on commit 8f77979

Please sign in to comment.