Skip to content

Commit

Permalink
Merge pull request #353 from DNO-inc/improve_auth_logs
Browse files Browse the repository at this point in the history
 create '/admin/tickets/followed' endpoint
  • Loading branch information
m-o-d-e-r authored May 29, 2024
2 parents 090c9e6 + 75008c5 commit 4927b69
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 59 deletions.
8 changes: 7 additions & 1 deletion burrito/apps/admin/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
admin__get_ticket_list_by_filter,
admin__show_detail_ticket_info,
admin__delete_ticket,
admin__update_profile
admin__update_profile,
admin__get_followed_tickets
)

admin_router = APIRouter()
Expand All @@ -30,6 +31,11 @@
admin__delete_ticket,
methods=["DELETE"]
)
admin_router.add_api_route(
"/tickets/followed",
admin__get_followed_tickets,
methods=["POST"]
)

admin_router.add_api_route(
"/profile/update",
Expand Down
70 changes: 68 additions & 2 deletions burrito/apps/admin/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
q_scope_is,
q_creator_is,
q_assignee_is,
q_is_hidden
q_is_hidden,
q_followed
)
from burrito.utils.users_util import get_user_by_id
from burrito.utils.mongo_util import (
Expand All @@ -42,7 +43,9 @@
change_ticket_faculty,
change_ticket_queue,
change_ticket_assignee,
am_i_own_this_ticket
am_i_own_this_ticket,
get_filtered_bookmarks,
get_filtered_bookmarks_count
)
from burrito.utils.logger import get_logger
from burrito.utils.auth import get_current_user
Expand Down Expand Up @@ -269,3 +272,66 @@ async def admin__update_profile(
status_code=status.HTTP_403_FORBIDDEN,
content={"detail": "It's prohibited to update this profile"}
)


async def admin__get_followed_tickets(
_filters: AdminGetTicketListSchema | None = AdminGetTicketListSchema(),
_curr_user: Users = Depends(get_current_user(permission_list={"ADMIN"}))
):
admin_filters = [
q_is_hidden(_filters.hidden),
q_is_anonymous(_filters.anonymous),
q_is_valid_faculty(_filters.faculty),
q_is_valid_status_list(_filters.status),
q_scope_is(_filters.scope),
q_is_valid_queue(_filters.queue),
q_followed(_curr_user.user_id)
]

available_filters = {
"ADMIN": admin_filters,
"CHIEF_ADMIN": admin_filters,
"default": [
q_is_hidden(False)
]
}
final_filters = select_filters(_curr_user.role.name, available_filters)
expression: list[Tickets] = get_filtered_bookmarks(
final_filters,
start_page=_filters.start_page,
tickets_count=_filters.items_count
)

response_list: list[AdminTicketDetailInfo] = []
for ticket in expression:
creator = None
if not ticket.anonymous:
creator = make_short_user_data(ticket.creator, hide_user_id=False)

assignee = None
if ticket.assignee:
assignee = make_short_user_data(
ticket.assignee,
hide_user_id=False
)

response_list.append(
make_ticket_detail_info(
ticket,
_curr_user,
creator,
assignee,
crop_body=True
)
)

return AdminTicketListResponse(
ticket_list=response_list,
total_pages=math.ceil(
get_filtered_bookmarks_count(
final_filters,
start_page=_filters.start_page,
tickets_count=_filters.items_count
) / _filters.items_count
)
)
46 changes: 0 additions & 46 deletions burrito/apps/tickets/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from typing import Any
from functools import cache

from burrito.utils.users_util import get_user_by_id
Expand All @@ -7,7 +6,6 @@

from burrito.utils.logger import get_logger

from burrito.models.bookmarks_model import Bookmarks
from burrito.models.statuses_model import Statuses
from burrito.models.tickets_model import Tickets
from burrito.models.queues_model import Queues
Expand Down Expand Up @@ -115,47 +113,3 @@ def make_ticket_detail_info(
is_bookmarked=is_ticket_bookmarked(current_user.user_id, ticket.ticket_id),
date=str(ticket.created)
)


def get_filtered_bookmarks(
_filters: list[Any],
_desc: bool = True,
start_page: int = 1,
tickets_count: int = 10
) -> list[Tickets]:
if _filters:
return Tickets.select(
Tickets
).join(
Bookmarks,
on=(Tickets.ticket_id == Bookmarks.ticket)
).where(*_filters).paginate(
start_page,
tickets_count
).order_by(
Bookmarks.created.desc() if _desc else Bookmarks.created
)

return Tickets.select(
Tickets
).join(
Bookmarks,
on=(Tickets.ticket_id == Bookmarks.ticket)
).paginate(
start_page,
tickets_count
).order_by(
Bookmarks.created.desc() if _desc else Bookmarks.created
)


def get_filtered_bookmarks_count(
_filters: list[Any],
start_page: int = 1,
tickets_count: int = 10
) -> int:
return get_filtered_bookmarks(
_filters,
start_page=start_page,
tickets_count=tickets_count
).count()
19 changes: 9 additions & 10 deletions burrito/apps/tickets/views/bookmarking_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from burrito.models.bookmarks_model import Bookmarks

from burrito.utils.users_util import get_user_by_id
from burrito.utils.auth import AuthTokenPayload, get_current_user
from burrito.utils.auth import get_current_user
from burrito.utils.query_util import (
q_is_anonymous,
q_is_valid_faculty,
Expand All @@ -30,22 +30,21 @@
from burrito.utils.tickets_util import (
make_short_user_data,
select_filters,
can_i_interact_with_ticket
can_i_interact_with_ticket,
get_filtered_bookmarks,
get_filtered_bookmarks_count
)
from burrito.utils.logger import get_logger

from ..utils import (
is_ticket_exist,
check_permission,
make_ticket_detail_info,
get_filtered_bookmarks,
get_filtered_bookmarks_count
make_ticket_detail_info
)


async def tickets__bookmark_ticket(
bookmark_ticket_data: TicketIDValueSchema,
_curr_user = Depends(get_current_user())
_curr_user=Depends(get_current_user())
):
"""Follow ticket"""

Expand Down Expand Up @@ -91,7 +90,7 @@ async def tickets__bookmark_ticket(

async def tickets__unbookmark_ticket(
unbookmark_ticket_data: TicketIDValueSchema,
_curr_user = Depends(get_current_user())
_curr_user=Depends(get_current_user())
):
"""Follow ticket"""

Expand Down Expand Up @@ -120,7 +119,7 @@ async def tickets__unbookmark_ticket(

async def tickets__get_bookmarked_tickets(
_filters: TicketsBasicFilterSchema | None = TicketsBasicFilterSchema(),
_curr_user = Depends(get_current_user())
_curr_user=Depends(get_current_user())
):
"""Get tickets which were bookmarked by current user"""

Expand Down Expand Up @@ -174,7 +173,7 @@ async def tickets__get_bookmarked_tickets(

async def tickets__get_followed_tickets(
_filters: BaseFilterSchema | None = BaseFilterSchema(),
_curr_user = Depends(get_current_user())
_curr_user=Depends(get_current_user())
):
"""Get tickets which were followed by current user"""

Expand Down
44 changes: 44 additions & 0 deletions burrito/utils/tickets_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -830,3 +830,47 @@ def can_i_interact_with_ticket(ticket: Tickets | int, user: Users | int) -> bool
or user.user_id in (ticket.creator.user_id, ticket.assignee.user_id if ticket.assignee else -1)
or is_admin(user)
)


def get_filtered_bookmarks(
_filters: list[Any],
_desc: bool = True,
start_page: int = 1,
tickets_count: int = 10
) -> list[Tickets]:
if _filters:
return Tickets.select(
Tickets
).join(
Bookmarks,
on=(Tickets.ticket_id == Bookmarks.ticket)
).where(*_filters).paginate(
start_page,
tickets_count
).order_by(
Bookmarks.created.desc() if _desc else Bookmarks.created
)

return Tickets.select(
Tickets
).join(
Bookmarks,
on=(Tickets.ticket_id == Bookmarks.ticket)
).paginate(
start_page,
tickets_count
).order_by(
Bookmarks.created.desc() if _desc else Bookmarks.created
)


def get_filtered_bookmarks_count(
_filters: list[Any],
start_page: int = 1,
tickets_count: int = 10
) -> int:
return get_filtered_bookmarks(
_filters,
start_page=start_page,
tickets_count=tickets_count
).count()

0 comments on commit 4927b69

Please sign in to comment.