Conversation
- Implement EmailUsers component to allow sending emails to users based on filters. - Add API endpoints for fetching email recipient counts and sending emails. - Update user entity methods to support filtering users for email sending. - Enhance styles for the email form in the admin panel. - Update home page subtitle for better clarity.
Greptile SummaryThis PR discontinues paid plugin support in Acode by deactivating existing paid plugins via a one-time migration script, removing the Google Play in-app product (
Confidence Score: 3/5Merge with caution — the new admin email feature has logic and correctness issues that should be resolved first. The core paid-plugin discontinuation (migration, server-side price validation, UI notice) is correct. However, the new EmailUsers admin component has a blocking sequential email loop that will timeout for any meaningful number of recipients, plus two relative fetch URLs that can silently 404 depending on routing. These are real functional bugs, not style nits, which keeps the score at 3. server/apis/admin.js (sequential email loop may timeout) and client/pages/admin/index.js (relative fetch URLs, missing error handling in fetchCount) Important Files Changed
Sequence DiagramsequenceDiagram
participant Admin as Admin Browser
participant Client as EmailUsers Component
participant Server as Express Server
participant DB as SQLite DB
participant SMTP as Email (SMTP)
Admin->>Client: Select filter
Client->>Server: GET /api/admin/email-recipients-count?filter=...
Server->>DB: countUsersByFilter(filter)
DB-->>Server: { count }
Server-->>Client: { count }
Client-->>Admin: Show recipient count
Admin->>Client: Enter subject & message, click Send
Client->>Server: POST /api/admin/send-email { filter, subject, message }
Server->>DB: getUsersByFilter(filter)
DB-->>Server: [ user list ]
loop For each user (sequential, blocking)
Server->>SMTP: sendEmail(user.email, ...)
SMTP-->>Server: OK
end
Server-->>Client: { sent: N }
Client-->>Admin: Alert success
Reviews (1): Last reviewed commit: "Implement paid plugin discontinuation: u..." | Re-trigger Greptile |
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
No description provided.