mirror of
https://github.com/Sea-Haven-Industries/meal-order-manager.git
synced 2026-09-30 21:43:13 +00:00
Apply ruff check --fix and ruff format across all Python files to pass CI pipeline. Remove unused imports (os, sys), fix f-strings without placeholders. Update README to reflect sync-roster Lambda, corrected shared layer path, and current project structure.
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
import os
|
|
|
|
from shared.db import get_roster, put_roster
|
|
from shared.slack import get_channel_members, get_user_info
|
|
|
|
|
|
def lambda_handler(event, context):
|
|
channel_id = os.environ.get("SLACK_CHANNEL_ID") or __import__(
|
|
"shared.secrets", fromlist=["get_parameter"]
|
|
).get_parameter(os.environ["SLACK_CHANNEL_PARAM"])
|
|
|
|
member_ids = get_channel_members(channel_id)
|
|
if not member_ids:
|
|
return {"status": "error", "message": "No members found in channel"}
|
|
|
|
employees = []
|
|
skipped = 0
|
|
for uid in member_ids:
|
|
info = get_user_info(uid)
|
|
if not info or info.get("is_bot") or info.get("id") == "USLACKBOT":
|
|
skipped += 1
|
|
continue
|
|
|
|
profile = info.get("profile", {})
|
|
name = profile.get("real_name") or info.get("real_name", "")
|
|
email = profile.get("email", "")
|
|
|
|
if not name or not email:
|
|
skipped += 1
|
|
continue
|
|
|
|
employees.append(
|
|
{
|
|
"name": name,
|
|
"email": email,
|
|
"slack_user_id": uid,
|
|
}
|
|
)
|
|
|
|
employees.sort(key=lambda e: e["name"])
|
|
|
|
existing = get_roster()
|
|
existing_set = {(e["name"], e["email"], e["slack_user_id"]) for e in existing}
|
|
new_set = {(e["name"], e["email"], e["slack_user_id"]) for e in employees}
|
|
|
|
if existing_set == new_set:
|
|
return {
|
|
"status": "no_change",
|
|
"employee_count": len(employees),
|
|
}
|
|
|
|
put_roster(employees)
|
|
|
|
added = new_set - existing_set
|
|
removed = existing_set - new_set
|
|
|
|
return {
|
|
"status": "synced",
|
|
"employee_count": len(employees),
|
|
"added": len(added),
|
|
"removed": len(removed),
|
|
"skipped": skipped,
|
|
}
|