Skip to content

Commit cb5ec8c

Browse files
committed
user group updates
1 parent f5d4d58 commit cb5ec8c

3 files changed

Lines changed: 20 additions & 31 deletions

File tree

src/database/users.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,25 @@ async def search_users(cursor: AsyncCursor, filters: UserFilters) -> UserPage:
3232
page : UserPage
3333
Paginated search results for users.
3434
"""
35-
query = """
35+
where_clauses = []
36+
params = filters.model_dump()
37+
38+
# Only add roles filter if present and non-empty
39+
if getattr(filters, "roles", None):
40+
where_clauses.append("role = ANY(%(roles)s)")
41+
42+
# Always allow searching by query
43+
where_clauses.append("(%(query)s IS NULL OR name ~* %(query)s)")
44+
45+
where_sql = " AND ".join(where_clauses) if where_clauses else "TRUE"
46+
47+
query = f"""
3648
SELECT
3749
*, COUNT(*) OVER() AS total_count
3850
FROM
3951
users
4052
WHERE
41-
role = ANY(%(roles)s)
42-
AND (%(query)s IS NULL OR name ~* %(query)s)
53+
{where_sql}
4354
ORDER BY
4455
name
4556
OFFSET
@@ -48,7 +59,7 @@ async def search_users(cursor: AsyncCursor, filters: UserFilters) -> UserPage:
4859
%(limit)s
4960
;
5061
"""
51-
await cursor.execute(query, filters.model_dump())
62+
await cursor.execute(query, params)
5263
rows = await cursor.fetchall()
5364
page = UserPage.from_search(rows, filters)
5465
return page

src/entities/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class BaseMetadata(BaseModel):
3333
@classmethod
3434
def format_created_at(cls, value):
3535
"""(De)serialisation function for `created_at` timestamp."""
36+
if value is None:
37+
return timestamp() # Use default timestamp if None
3638
if isinstance(value, str):
3739
return value
3840
return value.isoformat()
@@ -103,6 +105,8 @@ class BaseEntity(BaseMetadata):
103105
@classmethod
104106
def format_modified_at(cls, value):
105107
"""(De)serialisation function for `modified_at` timestamp."""
108+
if value is None:
109+
return timestamp() # Use default timestamp if None
106110
if isinstance(value, str):
107111
return value
108112
return value.isoformat()

src/routers/user_groups.py

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,6 @@ class UserGroupUpdate(BaseModel):
3636
signal_ids: List[int] = []
3737
user_ids: List[Union[str, int]] = [] # Can be either user IDs or email addresses
3838
collaborator_map: Dict[str, List[int]] = {}
39-
created_at: Optional[str] = None
40-
status: Optional[str] = None
41-
created_by: Optional[str] = None
42-
created_for: Optional[str] = None
43-
modified_at: Optional[str] = None
44-
modified_by: Optional[str] = None
45-
headline: Optional[str] = None
46-
attachment: Optional[str] = None
47-
steep_primary: Optional[str] = None
48-
steep_secondary: Optional[str] = None
49-
signature_primary: Optional[str] = None
50-
signature_secondary: Optional[str] = None
51-
sdgs: Optional[List[str]] = None
5239

5340

5441
class UserEmailIdentifier(BaseModel):
@@ -596,20 +583,7 @@ async def update_user_group(
596583
name=group_data.name,
597584
signal_ids=group_data.signal_ids,
598585
user_ids=processed_user_ids, # Use the processed user IDs
599-
collaborator_map=group_data.collaborator_map,
600-
created_at=group_data.created_at,
601-
status=group_data.status,
602-
created_by=group_data.created_by,
603-
created_for=group_data.created_for,
604-
modified_at=group_data.modified_at,
605-
modified_by=group_data.modified_by,
606-
headline=group_data.headline,
607-
attachment=group_data.attachment,
608-
steep_primary=group_data.steep_primary,
609-
steep_secondary=group_data.steep_secondary,
610-
signature_primary=group_data.signature_primary,
611-
signature_secondary=group_data.signature_secondary,
612-
sdgs=group_data.sdgs
586+
collaborator_map=group_data.collaborator_map
613587
)
614588
logger.debug("UserGroup entity created successfully")
615589

0 commit comments

Comments
 (0)