-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathme_articles_delete.py
72 lines (63 loc) · 2.53 KB
/
me_articles_delete.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# -*- coding: utf-8 -*-
import os
import time
import settings
import logging
import json
from db_util import DBUtil
from lambda_base import LambdaBase
from jsonschema import validate
from user_util import UserUtil
from botocore.exceptions import ClientError
class MeArticlesDelete(LambdaBase):
def get_schema(self):
return {
'type': 'object',
'properties': {
'article_id': settings.parameters['article_id']
},
'required': ['article_id']
}
def validate_params(self):
UserUtil.verified_phone_and_email(self.event)
validate(self.params, self.get_schema())
DBUtil.validate_article_existence(
self.dynamodb,
self.params['article_id'],
user_id=self.event['requestContext']['authorizer']['claims']['cognito:username'],
status='draft')
DBUtil.validate_article_history_existence(self.dynamodb, self.params['article_id'])
def exec_main_proc(self):
article_info_table = self.dynamodb.Table(os.environ['ARTICLE_INFO_TABLE_NAME'])
article_info = article_info_table.get_item(
Key={"article_id": self.params['article_id']}
)['Item']
article_content_table = self.dynamodb.Table(os.environ['ARTICLE_CONTENT_TABLE_NAME'])
article_content = article_content_table.get_item(
Key={"article_id": self.params['article_id']}
)['Item']
deleted_draft_article_info_table = self.dynamodb.Table(os.environ['DELETED_DRAFT_ARTICLE_INFO_TABLE_NAME'])
deleted_draft_article_content_table = \
self.dynamodb.Table(os.environ['DELETED_DRAFT_ARTICLE_CONTENT_TABLE_NAME'])
article_info.update({'deleted_at': int(time.time())})
article_content.update({'deleted_at': int(time.time())})
try:
deleted_draft_article_info_table.put_item(Item=article_info)
deleted_draft_article_content_table.put_item(Item=article_content)
article_info_table.delete_item(
Key={
'article_id': self.params['article_id']
}
)
article_content_table.delete_item(
Key={
'article_id': self.params['article_id']
}
)
except ClientError as e:
logging.fatal(e)
return {
'statusCode': 500,
'body': json.dumps({'message': 'Internal server error'})
}
return {'statusCode': 200}