Add saveReceivedEmail service
This commit is contained in:
@ -27,6 +27,15 @@ interface ForwardEmailMessage {
|
||||
forwardedFrom?: string
|
||||
}
|
||||
|
||||
function isForwardEmailMessage(data: any): data is ForwardEmailMessage {
|
||||
return (
|
||||
'from' in data &&
|
||||
'to' in data &&
|
||||
'subject' in data &&
|
||||
('html' in data || 'text' in data)
|
||||
)
|
||||
}
|
||||
|
||||
const logger = buildLogger('app.dispatch')
|
||||
|
||||
export function emailsServiceRouter() {
|
||||
@ -37,7 +46,6 @@ export function emailsServiceRouter() {
|
||||
logger.info('email forward router')
|
||||
|
||||
const { message, expired } = readPushSubscription(req)
|
||||
logger.info('pubsub message:', { message, expired })
|
||||
|
||||
if (!message) {
|
||||
res.status(400).send('Bad Request')
|
||||
@ -51,15 +59,8 @@ export function emailsServiceRouter() {
|
||||
}
|
||||
|
||||
try {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const data: ForwardEmailMessage = JSON.parse(message)
|
||||
|
||||
if (
|
||||
!('from' in data) ||
|
||||
!('to' in data) ||
|
||||
!('subject' in data) ||
|
||||
(!('html' in data) && !('text' in data))
|
||||
) {
|
||||
const data = JSON.parse(message) as unknown
|
||||
if (!isForwardEmailMessage(data)) {
|
||||
logger.error('Invalid message')
|
||||
res.status(400).send('Bad Request')
|
||||
return
|
||||
|
||||
20
packages/api/src/services/received_emails.ts
Normal file
20
packages/api/src/services/received_emails.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import { ReceivedEmail } from '../entity/received_email'
|
||||
import { getRepository } from '../entity/utils'
|
||||
|
||||
export const saveReceivedEmail = async (
|
||||
from: string,
|
||||
to: string,
|
||||
subject: string,
|
||||
text: string,
|
||||
html: string,
|
||||
userId: string
|
||||
): Promise<ReceivedEmail> => {
|
||||
return getRepository(ReceivedEmail).save({
|
||||
from,
|
||||
to,
|
||||
subject,
|
||||
text,
|
||||
html,
|
||||
user: { id: userId },
|
||||
})
|
||||
}
|
||||
@ -19,6 +19,25 @@ CREATE TABLE omnivore.received_emails (
|
||||
CREATE TRIGGER received_emails_modtime BEFORE UPDATE ON omnivore.received_emails
|
||||
FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE ON omnivore.received_emails TO omnivore_user;
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON omnivore.received_emails TO omnivore_user;
|
||||
|
||||
-- Create a trigger to keep the most recent 20 emails for each user
|
||||
CREATE OR REPLACE FUNCTION omnivore.delete_old_received_emails()
|
||||
RETURNS trigger AS $$
|
||||
BEGIN
|
||||
DELETE FROM omnivore.received_emails
|
||||
WHERE id NOT IN (
|
||||
SELECT id FROM omnivore.received_emails
|
||||
WHERE user_id = NEW.user_id
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 20
|
||||
);
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER delete_old_received_emails
|
||||
AFTER INSERT ON omnivore.received_emails
|
||||
FOR EACH ROW EXECUTE PROCEDURE omnivore.delete_old_received_emails();
|
||||
|
||||
COMMIT;
|
||||
|
||||
Reference in New Issue
Block a user