Skip to content

Commit b60a95e

Browse files
committed
Add a search_day param for tags_count.
1 parent 00824b0 commit b60a95e

File tree

4 files changed

+61
-3
lines changed

4 files changed

+61
-3
lines changed

src/common/settings.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,12 @@
283283
},
284284
'pin_code': {
285285
'type': 'string'
286-
}
286+
},
287+
'tags_count_search_days': {
288+
'type': 'integer',
289+
'minimum': 1,
290+
'maximum': 10000
291+
},
287292
}
288293

289294
# ログに出力されてはいけないパラメータ(ログ出力時に値がマスクされる)

src/handlers/search/tags_count/search_tags_count.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,30 @@
66
from decimal_encoder import DecimalEncoder
77
from es_util import ESUtil
88
from lambda_base import LambdaBase
9+
from parameter_util import ParameterUtil
910

1011

1112
class SearchTagsCount(LambdaBase):
1213
def get_schema(self):
1314
return {
1415
'type': 'object',
1516
'properties': {
16-
'tags': settings.parameters['tags_count']
17+
'tags': settings.parameters['tags_count'],
18+
'search_days': settings.parameters['tags_count_search_days']
1719
},
1820
'required': ['tags']
1921
}
2022

2123
def validate_params(self):
24+
ParameterUtil.cast_parameter_to_int(self.params, self.get_schema())
2225
self.params['tags'] = self.event['multiValueQueryStringParameters'].get('tags')
2326
validate(self.params, self.get_schema())
2427

2528
def exec_main_proc(self):
2629
# 直近1週間分のタグを集計
2730
search_size = len(self.params['tags']) * settings.parameters['tags']['maxItems']
28-
from_time = 86400 * 7
31+
search_days = self.params.get('search_days') if self.params.get('search_days') else 7
32+
from_time = 86400 * search_days
2933
search_result = ESUtil.search_tags_count(self.elasticsearch, search_size, from_time)
3034

3135
# 集計結果より指定タグの件数を取得

swagger/swagger.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,11 @@ paths:
516516
type: array
517517
items:
518518
type: string
519+
- name: "search_days"
520+
in: "query"
521+
description: "検索対象の日数"
522+
required: false
523+
type: "integer"
519524
responses:
520525
"200":
521526
description: "タグ件数一覧"

tests/handlers/search/tags_count/test_search_tags_count.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,27 @@ def test_search_request(self):
8888
self.assertEqual(response['statusCode'], 200)
8989
self.assertEqual(expected, actual)
9090

91+
@patch('time.time', MagicMock(return_value=1530112710 + 86400 * 7))
92+
def test_search_request_exists_search_days(self):
93+
params = {
94+
'multiValueQueryStringParameters': {
95+
'tags': ['A', 'B', 'C', 'D']
96+
},
97+
'queryStringParameters': {
98+
'search_days': '8',
99+
}
100+
}
101+
response = SearchTagsCount(params, {}, elasticsearch=self.elasticsearch).main()
102+
actual = json.loads(response['body'])
103+
expected = [
104+
{'count': 4, 'tag': 'A'},
105+
{'count': 3, 'tag': 'B'},
106+
{'count': 2, 'tag': 'C'},
107+
{'count': 0, 'tag': 'D'}
108+
]
109+
self.assertEqual(response['statusCode'], 200)
110+
self.assertEqual(expected, actual)
111+
91112
def test_search_request_not_exists(self):
92113
params = {
93114
'multiValueQueryStringParameters': {
@@ -160,3 +181,26 @@ def test_invalid_tag_parmas(self):
160181
}
161182
response = SearchTagsCount(params, {}, elasticsearch=self.elasticsearch).main()
162183
self.assertEqual(response['statusCode'], 400)
184+
185+
def test_invalid_search_days_parmas(self):
186+
params = {
187+
'multiValueQueryStringParameters': {
188+
'tags': ['aaa']
189+
},
190+
'queryStringParameters': {
191+
'search_days': '0',
192+
}
193+
}
194+
response = SearchTagsCount(params, {}, elasticsearch=self.elasticsearch).main()
195+
self.assertEqual(response['statusCode'], 400)
196+
197+
params = {
198+
'multiValueQueryStringParameters': {
199+
'tags': ['aaa']
200+
},
201+
'queryStringParameters': {
202+
'search_days': '10001',
203+
}
204+
}
205+
response = SearchTagsCount(params, {}, elasticsearch=self.elasticsearch).main()
206+
self.assertEqual(response['statusCode'], 400)

0 commit comments

Comments
 (0)