Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ALIS-1138: 違反報告APIの拡張 #138

Open
wants to merge 20 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
f3489e1
違反報告系の定数を追加
ippei-fukamatsu Jul 13, 2018
87937f2
パラメーターに違反報告の詳細を追加
ippei-fukamatsu Jul 13, 2018
f7592fe
入力の検証を追加中
ippei-fukamatsu Jul 13, 2018
b873079
print削除
ippei-fukamatsu Jul 13, 2018
d97f069
特定の理由の時に依存項目の入力チェック
ippei-fukamatsu Jul 14, 2018
cb36b08
リファクタリングついでにテストFIX
ippei-fukamatsu Jul 14, 2018
fc446e8
不要な差分がでてたので戻した
ippei-fukamatsu Jul 14, 2018
e71fb42
空の行削除
ippei-fukamatsu Jul 14, 2018
4a44306
追加項目がinsertされていないという痛恨のミス
ippei-fukamatsu Jul 14, 2018
38756fb
pycodestyle対応
ippei-fukamatsu Jul 14, 2018
b987a61
桁数、入力チェックルールの変更
ippei-fukamatsu Jul 24, 2018
c416670
一旦前の実装に戻す
ippei-fukamatsu Jul 24, 2018
a4cb890
テストパターンにそれぞれの理由での正常系を追加
ippei-fukamatsu Jul 25, 2018
51bbe61
メソッド名変更
ippei-fukamatsu Jul 25, 2018
4c0352d
差分がでないよう元に戻す
ippei-fukamatsu Jul 25, 2018
abe0a62
リファクタ: ご指摘いただいた通りシンプルに書けたので修正
ippei-fukamatsu Jul 30, 2018
1ced9c0
空文字があり得る項目のテストケースを追加
ippei-fukamatsu Jul 30, 2018
825e9a1
念のため登録前に空文字をNoneに変換してくれる共通関数を呼び出し
ippei-fukamatsu Jul 30, 2018
c3a40b5
空の行を削除
ippei-fukamatsu Jul 30, 2018
7c569a2
shared-local-instance.dbが混じってしまったので削除
ippei-fukamatsu Jul 30, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions api-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,17 @@ Resources:
type: string
created_at:
type: integer
MeArticlesFraudCreate:
type: object
properties:
reason:
type: string
plagiarism_url:
type: string
plagiarism_description:
type: string
illegal_content:
type: string
paths:
/search/articles:
get:
Expand Down Expand Up @@ -883,6 +894,11 @@ Resources:
description: '対象記事の指定するために使用'
required: true
type: 'string'
- name: 'FraudContents'
in: 'body'
description: '違反報告の内容'
schema:
$ref: '#/definitions/MeArticlesFraudCreate'
responses:
'200':
description: '不正報告の実施成功'
Expand Down
31 changes: 30 additions & 1 deletion src/common/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,32 @@
'type': 'string',
'minLength': 1,
'maxLength': 150
},
'fraud_user': {
'reason': {
'type': 'string',
'enum': [
'violence',
'spam',
'plagiarism',
'slander',
'illegal',
'other'
]
},
'plagiarism_url': {
'type': 'string',
'format': 'uri',
'maxLength': 2048
},
'plagiarism_description': {
'type': 'string',
'maxLength': 1000
},
'illegal_content': {
'type': 'string',
'maxLength': 1000
}
}
}

Expand Down Expand Up @@ -146,7 +172,6 @@
'xml', 'year'
]


LIKED_RETRY_COUNT = 3

ARTICLE_IMAGE_MAX_WIDTH = 3840
Expand All @@ -160,3 +185,7 @@

LIKE_NOTIFICATION_TYPE = 'like'
COMMENT_NOTIFICATION_TYPE = 'comment'

FRAUD_NEED_ORIGINAL_REASONS = ['plagiarism']

FRAUD_NEED_DETAIL_REASONS = ['illegal', 'other']
33 changes: 30 additions & 3 deletions src/handlers/me/articles/fraud/create/me_articles_fraud_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@
from db_util import DBUtil
from botocore.exceptions import ClientError
from lambda_base import LambdaBase
from jsonschema import validate, ValidationError
from jsonschema import validate, ValidationError, FormatChecker


class MeArticlesFraudCreate(LambdaBase):
def get_schema(self):
return {
'type': 'object',
'properties': {
'article_id': settings.parameters['article_id']
'article_id': settings.parameters['article_id'],
'reason': settings.parameters['fraud_user']['reason'],
'plagiarism_url': settings.parameters['fraud_user']['plagiarism_url'],
'plagiarism_description': settings.parameters['fraud_user']['plagiarism_description'],
'illegal_content': settings.parameters['fraud_user']['illegal_content']
},
'required': ['article_id']
}
Expand All @@ -23,7 +27,8 @@ def validate_params(self):
# single
if self.event.get('pathParameters') is None:
raise ValidationError('pathParameters is required')
validate(self.event.get('pathParameters'), self.get_schema())
validate(self.params, self.get_schema(), format_checker=FormatChecker())
self.__validate_reason_dependencies(self.params)
# relation
DBUtil.validate_article_existence(
self.dynamodb,
Expand Down Expand Up @@ -52,9 +57,31 @@ def __create_article_fraud_user(self, article_fraud_user_table):
article_fraud_user = {
'article_id': self.event['pathParameters']['article_id'],
'user_id': self.event['requestContext']['authorizer']['claims']['cognito:username'],
'reason': self.params.get('reason'),
'plagiarism_url': self.params.get('plagiarism_url'),
'plagiarism_description': self.params.get('plagiarism_description'),
'illegal_content': self.params.get('illegal_content'),
'created_at': int(time.time())
}
DBUtil.items_values_empty_to_none(article_fraud_user)

article_fraud_user_table.put_item(
Item=article_fraud_user,
ConditionExpression='attribute_not_exists(article_id)'
)

def __validate_reason_dependencies(self, params):
reason = params.get('reason')
if reason in settings.FRAUD_NEED_ORIGINAL_REASONS:
self.__validate_plagiarism_dependencies(params)

if reason in settings.FRAUD_NEED_DETAIL_REASONS:
self.__validate_illegal_content_dependencies(params)

def __validate_plagiarism_dependencies(self, params):
if not params.get('plagiarism_url') and not params.get('plagiarism_description'):
raise ValidationError('plagiarism_url or plagiarism_description is required')

def __validate_illegal_content_dependencies(self, params):
if not params.get('illegal_content'):
raise ValidationError('illegal_content is required')
Loading