Noor2623 commited on
Commit
39a56a6
·
1 Parent(s): dd74be9

Show saved queries in tickets

Browse files
app/routes/admin.py CHANGED
@@ -5,6 +5,7 @@ from app.dependencies import get_current_admin_user, get_db
5
  from app.models.user import User
6
  from app.schemas.admin import AdminDepartmentUpdate, AdminUserUpdate
7
  from app.schemas.department import DepartmentCreate, DepartmentResponse
 
8
  from app.schemas.user import UserRead
9
  from app.services.admin_service import (
10
  create_department,
@@ -17,6 +18,7 @@ from app.services.admin_service import (
17
  update_department,
18
  update_user,
19
  )
 
20
 
21
 
22
  router = APIRouter(prefix="/admin", tags=["admin"])
@@ -91,6 +93,15 @@ def admin_list_users(
91
  return list_users(db)
92
 
93
 
 
 
 
 
 
 
 
 
 
94
  @router.get("/users/{user_id}", response_model=UserRead)
95
  def admin_get_user(
96
  user_id: int,
 
5
  from app.models.user import User
6
  from app.schemas.admin import AdminDepartmentUpdate, AdminUserUpdate
7
  from app.schemas.department import DepartmentCreate, DepartmentResponse
8
+ from app.schemas.query import QueryRead
9
  from app.schemas.user import UserRead
10
  from app.services.admin_service import (
11
  create_department,
 
18
  update_department,
19
  update_user,
20
  )
21
+ from app.services.query_service import list_all_queries
22
 
23
 
24
  router = APIRouter(prefix="/admin", tags=["admin"])
 
93
  return list_users(db)
94
 
95
 
96
+ @router.get("/queries", response_model=list[QueryRead])
97
+ def admin_list_queries(
98
+ db: Session = Depends(get_db),
99
+ current_admin: User = Depends(get_current_admin_user),
100
+ ):
101
+ _ = current_admin
102
+ return list_all_queries(db)
103
+
104
+
105
  @router.get("/users/{user_id}", response_model=UserRead)
106
  def admin_get_user(
107
  user_id: int,
app/services/query_service.py CHANGED
@@ -41,3 +41,12 @@ def list_queries_for_user(db: Session, *, current_user: User) -> list[Query]:
41
  .order_by(Query.created_at.desc(), Query.id.desc())
42
  .all()
43
  )
 
 
 
 
 
 
 
 
 
 
41
  .order_by(Query.created_at.desc(), Query.id.desc())
42
  .all()
43
  )
44
+
45
+
46
+ def list_all_queries(db: Session) -> list[Query]:
47
+ return (
48
+ db.query(Query)
49
+ .options(selectinload(Query.department))
50
+ .order_by(Query.created_at.desc(), Query.id.desc())
51
+ .all()
52
+ )
tests/test_queries.py CHANGED
@@ -7,6 +7,7 @@ from app.models.department import Department
7
  from app.schemas.auth import SignupRequest
8
  from app.schemas.query import QueryCreate
9
  from app.services.auth_service import create_user
 
10
  from app.services.query_service import create_query, list_queries_for_user
11
 
12
 
@@ -158,3 +159,47 @@ def test_list_queries_for_user_only_returns_that_users_queries():
158
  finally:
159
  db.close()
160
  Base.metadata.drop_all(bind=engine)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  from app.schemas.auth import SignupRequest
8
  from app.schemas.query import QueryCreate
9
  from app.services.auth_service import create_user
10
+ from app.services import query_service
11
  from app.services.query_service import create_query, list_queries_for_user
12
 
13
 
 
159
  finally:
160
  db.close()
161
  Base.metadata.drop_all(bind=engine)
162
+
163
+
164
+ def test_list_all_queries_returns_every_saved_query_for_admin():
165
+ engine, db = _make_session()
166
+ try:
167
+ finance = Department(
168
+ name="Finance Department",
169
+ code="FIN",
170
+ description="Handles fees, refunds, and payment plans",
171
+ keywords="fee, payment, tuition, refund",
172
+ )
173
+ admin = Department(
174
+ name="Admin",
175
+ code="ADMIN",
176
+ description="Fallback team",
177
+ keywords="general, other",
178
+ )
179
+ db.add_all([finance, admin])
180
+ db.commit()
181
+ db.refresh(finance)
182
+ db.refresh(admin)
183
+
184
+ student_one = _create_student(db, email="student1@example.com")
185
+ student_two = _create_student(db, email="student2@example.com")
186
+
187
+ first_query = create_query(
188
+ db,
189
+ current_user=student_one,
190
+ payload=QueryCreate(message="Question about tuition payment"),
191
+ )
192
+ second_query = create_query(
193
+ db,
194
+ current_user=student_two,
195
+ payload=QueryCreate(message="Different student's message"),
196
+ )
197
+
198
+ queries = query_service.list_all_queries(db)
199
+
200
+ assert [query.id for query in queries] == [second_query.id, first_query.id]
201
+ assert queries[0].department_id in {finance.id, admin.id}
202
+ assert queries[1].department_id in {finance.id, admin.id}
203
+ finally:
204
+ db.close()
205
+ Base.metadata.drop_all(bind=engine)