diff --git a/README.md b/README.md index c1bdfeb..576f362 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

# ๐Ÿคฉ Hey + Emoji = Heymoji ๐Ÿ† @@ -11,16 +11,14 @@ ์ข€ ๋” ``์žฌ๋ฏธ๋‚œ ๊ธฐ๋Šฅ + ์™„์„ฑ๋„ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ``๊ฐ€ ๋˜๊ธฐ์œ„ํ•ด ์œ ์ง€๋ณด์ˆ˜๋Š” ์ง€์†์ ์œผ๋กœ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.๐Ÿ’ช
FastAPI์— ๊ตฌ์กฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ๋œ ์ถ”๊ฐ€๊ธฐ๋Šฅ, ๊ฐœ์„ ์‚ฌํ•ญ ``PR``์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!
-๐Ÿ™ˆ TMI:
-์•„์ด์ฝ˜์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ `๋žญํฌ`์—์„œ ์ˆœ๊ฐ„ `LoL๋žญํฌ`๊ฐ€ ๋– ์˜ฌ๋ž๊ณ , ์ œ๊ฐ€ ๊ณจ๋“œ๋ผ์„œ...๐Ÿ˜‚
-๋””์ž์ธ ์ž˜ํ•˜์‹œ๋Š”๋ถ„ ๊ธฐ์—ฌํ•ด ์ฃผ์„ธ์š”!ใ…‹ใ…‹

- +
-# Server ๐Ÿ–ฅ ## ๐Ÿ‘‹ ๊ฐœ์š” ``Heymoji``๋Š” ``Python 3.7.9``, ``FastAPI`` ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ์™ธ ๋ฒ„์ „์—์„œ ํŒจํ‚ค์ง€ ๋ฐ ๋™์ž‘์— ๋Œ€ํ•œ ํ˜ธํ™˜์€ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๊ทผ๋ฐ ๊ฑฐ์˜ ๋‹ค ๋ ๊ฑฐ์—์š” python 3 ์ด์ƒ์ด๋ฉด...์•„๋งˆ๋‘~๐Ÿ˜ )
+
+ ## ๐Ÿ›  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ฒ˜์Œ Heymoji๋ฅผ ๊ฐœ๋ฐœํ• ๋•Œ๋Š” DDD ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
DDD์— ๋Œ€ํ•œ ์Šคํ„ฐ๋””๋ฅผ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ https://github.com/Ermlab/python-ddd ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
@@ -45,38 +43,58 @@ DDD์— ๋Œ€ํ•œ ์Šคํ„ฐ๋””๋ฅผ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ https://github.com/E โ”œโ”€โ”€ conf | โ””โ”€โ”€ settings.py โ”œโ”€โ”€ scripts -โ””โ”€โ”€ seed_work (ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ์ž‘์—…, ์ฝ”๋“œ) +โ”œโ”€โ”€ migrations (alembic DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„ค์ •) +โ”œโ”€โ”€ seed_work (ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ์ž‘์—…, ์ฝ”๋“œ) +โ”œโ”€โ”€ alembic.ini +โ”œโ”€โ”€ requirements.txt +โ”œโ”€โ”€ .env_sample +โ”œโ”€โ”€ docker-compose.yaml +โ”œโ”€โ”€ Dockerfile +โ”œโ”€โ”€ web.Dockerfile +โ””โ”€โ”€ frontend (heymoji ์›นํŽ˜์ด์ง€ ๊ด€๋ จ ์ฝ”๋“œ) ``` -## โš™๏ธ ํŒจํ‚ค์ง€ ์„ค์น˜ -``` -pip install -r requirements -``` +
## ๐Ÿ’พ ์„ธํŒ… -``.env``ํŒŒ์ผ์„ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ์„ ์„ธํŒ… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -``.env_sample``์„ ์ฐธ๊ณ ํ•˜์…”์„œ ์›ํ•˜์‹œ๋Š” ํƒ€์ž…์˜ ์ด๋ชจ์ง€๋“ฑ์„ ์„ธํŒ…ํ•ด ๋ณด์„ธ์š”! +``.env_sample``์„ ์ฐธ๊ณ ํ•ด์„œ ``.env``ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
+์›ํ•˜์‹œ๋Š” ์„ธํŒ…์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ค์„ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.
DB๋Š” ``MySQL``์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ``aiomysql`` ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ DB ์‚ฌ์šฉํ•˜๋ ค๋ฉด `config` ์„ค์ •์ด ์กฐ๊ธˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |์ด๋ฆ„|์„ค๋ช…| |----|----| |ENV|๋ฐฐํฌํ™˜๊ฒฝ ์ •์˜| -|ALLOWED_EMOJI_TYPES|์ด๋ชจ์ง€ ํƒ€์ž…๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.| |REACTION_LIST|์›นํ›… ๋ฆฌ์•ก์…˜์œผ๋กœ ํ—ˆ์šฉ๋œ ์ด๋ชจ์ง€(reaction)๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.| -|DAY_MAX_REACTION|ํ•˜๋ฃจ ์ตœ๋Œ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Reaction ๊ฐœ์ˆ˜ (์„ ํƒ์š”์†Œ ์ž…๋‹ˆ๋‹ค.)| +|ALLOWED_EMOJI_TYPES|ํ•ธ๋“ค๋งํ•  ์ด๋ชจ์ง€๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.| +|DAY_MAX_REACTION|ํ•˜๋ฃจ ์ตœ๋Œ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Reaction ๊ฐœ์ˆ˜ (optinal)| |SLACK_TOKEN|์Šฌ๋ž™ ํ† ํฐ| |BOT_NAME|์Šฌ๋ž™๋ด‡ ์ด๋ฆ„| |ERROR_CHANNEL|์Šฌ๋ž™ ์—๋Ÿฌ ๋ฆฌํฌํŒ… ์ฑ„๋„| |HOST|DB ํ˜ธ์ŠคํŠธ| |PORT|DB ํฌํŠธ| |DATABASE|DB ์ด๋ฆ„| -|USERNAME|DB ์ ‘์† ์œ ์ €๋„ค์ž„ -|PASSWORD|DB ํŒจ์Šค์›Œ๋“œ)| +|USERNAME|DB ์ ‘์† ์œ ์ €๋„ค์ž„| +|PASSWORD|DB ํŒจ์Šค์›Œ๋“œ| +|DEFAULT_AVATAR_URL|๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ URL)| +
+ +## ๐Ÿณ Docker-Compose ์‹คํ–‰ +``.env``ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋’ค `docker-compose up -d` ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
+๋ช‡๋ถ„ํ›„ api, web, db ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰ ๋œ ํ›„ http://127.0.0.1:8080 ์— ์ ‘์†ํ•˜์—ฌ ๋™์ž‘์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
+ +แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-02 แ„‹แ…ฉแ„’แ…ฎ 10 54 35 + +`docker-comopse` ์‹คํ–‰ ์ „์— README ํ•˜๋‹จ์— ์žˆ๋Š” `Slack Bot ์„ค์ •` ์„ค๋ช…์„ ๋จผ์ € ๋ณด์‹œ๊ณ  `SlackToken` ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ์„ธ์š”! -## ๐Ÿ’ก ์‹คํ–‰ -`root๊ฒฝ๋กœ`(/emoji_rank) ์— ๊ฐ€์„œ uvicorn์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.
+
+ +## ๐Ÿ’ก ๋กœ์ปฌ ์‹คํ–‰ +``` +pip install -r requirements +``` +`root๊ฒฝ๋กœ`(/heymoji) ์— ๊ฐ€์„œ uvicorn์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.
๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `&`๋ฅผ ๋งˆ์ง€๋ง‰์— ๋ถ™์—ฌ์ฃผ์„ธ์š”. ``` uvicorn app.main:app --port 8080 @@ -88,11 +106,15 @@ uvicorn app.main:app --port 8080 ``` ์ž˜๋ชป๋œ ํ”„๋กœ์„ธ์Šค kill์„ ์ฃผ์˜ํ•˜์„ธ์š”!
+
+ ## ๐Ÿ“ API ๋ฌธ์„œ ๋ฐ ํ…Œ์ŠคํŠธ ``HOST_URL/docs``๋กœ ์ ‘์†ํ•˜๋ฉด ``Swagger``๋กœ ๋งŒ๋“ค์–ด์ง„ web ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (FastAPI๋Š” swagger, redoc ์ง€์›)
+
+ ## ๐Ÿ‘พ ์Šฌ๋ž™ ๋งจ์…˜ ๋ช…๋ น์–ด |์ด๋ฆ„|์„ค๋ช…| |----|----| @@ -105,17 +127,33 @@ uvicorn app.main:app --port 8080 ``` -ex) ์‹ค์ œ ์‚ฌ์šฉ์‹œ '{{ }}' ๋Š” ์ œ๊ฑฐํ•ด์ฃผ์„ธ์š” -@์Šฌ๋ž™๋ด‡ --create_user --name={{์ด๋ฆ„}} --avatar_url={{์ด๋ฏธ์ง€URL}} +๐Ÿฅณ ๋ฉค๋ฒ„ ๋“ฑ๋ก +์ด๋ฆ„์€ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค! +@EmojiBot --create_user --name=์ด๋ฆ„ --avatar_url=์ด๋ฏธ์ง€URL --department=๋ถ€์„œ + +๐Ÿ›  ๋ฉค๋ฒ„ ์ •๋ณด ์—…๋ฐ์ดํŠธ +์—…๋ฐ์ดํŠธํ•  ์ •๋ณด๋งŒ ์ ์–ด์ฃผ์„ธ์š”! +@EmojiBot --update_user --avatar_url=์ด๋ฏธ์ง€URL + +๐ŸŽ– ์ด๋ฒˆ๋‹ฌ ๋ฒ ์ŠคํŠธ ๋ฉค๋ฒ„ ๋ฆฌ์ŠคํŠธ ์ถ”์ถœ +@EmojiBot --show_best_member --year=2022 --month=1 + +๐Ÿ™ˆ ์œ ์ € ์ˆจ๊ธฐ๊ธฐ +@EmojiBot --hide_user --slack_id=์Šฌ๋ž™ID + +๐Ÿ™‰ ์œ ์ € ๋ณด์ด๊ธฐ +@EmojiBot --show_user --slack_id=์Šฌ๋ž™ID ``` +
+ ## ๐ŸงŸโ€โ™‚๏ธ ํ”„๋กœ์„ธ์Šค Live ์ฒดํฌ (์„ ํƒ) shell script๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ Live ์ฒดํฌ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ํฌ๋ก ํƒญ์— 1๋ถ„๋งˆ๋‹ค ์‹คํ–‰ํ•˜๋„๋ก ๋“ฑ๋ก.
๋กœ๊น…๋„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ``` #! /bin/bash PYTHON_PATH=/{{ path }}/venv/bin/python -SCRIPT_PATH=/{{ path }}/emoji_rank/app +SCRIPT_PATH=/{{ path }}/heymoji/app checker=`ps aux | grep -v "grep" | grep "{{ ๊ฒ€์ƒ‰ํ•  ์ด๋ฆ„}}" | wc -l` @@ -125,15 +163,15 @@ if [ "$checker" == "0" ]; then fi ``` -## ๐Ÿƒ๐Ÿปโ€ ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ ํฌ๋ก ํƒญ ๋“ฑ๋ก (์„ ํƒ) -๋ฉค๋ฒ„๋‹น ํ•˜๋ฃจ์— ํ—ˆ์šฉ๋œ ``DAY_MAX_REACTION`` ๋งŒํผ ์ด๋ชจ์ง€(Emoji)๋ฅผ ๋‹ค๋ฅธ ๋ฉค๋ฒ„์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
-๋งค์ผ ์ž์ •์— ๋‹ค์‹œ ``DAY_MAX_REACTION``๋งŒํผ ์นด์šดํŠธ๋ฅผ ๋ฆฌ์…‹ํ•˜๋Š” ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ``ํฌ๋ก ํƒญ``์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
-์ €๋Š” ``์‰˜์Šคํฌ๋ฆฝํŠธ``๋ฅผ ๋งŒ๋“ค์–ด์„œ ``ํฌ๋ก ํƒญ``์— ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. +## ~๐Ÿƒ๐Ÿปโ€ ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ ํฌ๋ก ํƒญ ๋“ฑ๋ก~ +~๋ฉค๋ฒ„๋‹น ํ•˜๋ฃจ์— ํ—ˆ์šฉ๋œ ``DAY_MAX_REACTION`` ๋งŒํผ ์ด๋ชจ์ง€(Emoji)๋ฅผ ๋‹ค๋ฅธ ๋ฉค๋ฒ„์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.~
+~๋งค์ผ ์ž์ •์— ๋‹ค์‹œ ``DAY_MAX_REACTION``๋งŒํผ ์นด์šดํŠธ๋ฅผ ๋ฆฌ์…‹ํ•˜๋Š” ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ``ํฌ๋ก ํƒญ``์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.~
+~์ €๋Š” ``์‰˜์Šคํฌ๋ฆฝํŠธ``๋ฅผ ๋งŒ๋“ค์–ด์„œ ``ํฌ๋ก ํƒญ``์— ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.~ ``` #!/bin/bash PYTHON_PATH=/{{ path }}/venv/bin/python -SCRIPT_PATH=/{{ path }}/emoji_rank/scripts/update_emoji_count.py +SCRIPT_PATH=/{{ path }}/heymoji/scripts/update_emoji_count.py source '{{ path }}/venv/bin/activate' @@ -142,12 +180,15 @@ $PYTHON_PATH $SCRIPT_PATH
# ๐Ÿค– Slack Bot ์„ค์ • +แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-02 แ„‹แ…ฉแ„’แ…ฎ 10 12 32 + +์œ„ ํ™”๋ฉด์—์„œ ์Šฌ๋ž™ํ† ํฐ์„ copyํ•˜์—ฌ ``.env`` ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. + https://api.slack.com/apps ์— ์ ‘์†ํ•˜์—ฌ create app ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„,
์›ํ•˜๋Š” ``workspace``์— ``app``์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”! - `Basic Information` ํƒญ์„ ํด๋ฆญํ›„ ํ•˜๋‹จ์—์„œ app์˜ ``ํ”„๋กœํ•„ ์ด๋ฏธ์ง€``๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  Save ํ•ด์ค๋‹ˆ๋‹ค.
@@ -178,10 +219,10 @@ https://api.slack.com/apps ์— ์ ‘์†ํ•˜์—ฌ create app ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„, ๋งˆ์ง€๋ง‰์œผ๋กœ `app`์„ `workspace`์— ์„ค์น˜(install)ํ•˜๋ฉด ์„ค์ •ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค `slack`์—์„œ `Heymoji`์„œ๋ฒ„๋กœ ์›นํ›… api๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. +
-# ํ”„๋ก ํŠธ ์˜ˆ์ œ ๐Ÿ“ฒ -![vllo 5](https://user-images.githubusercontent.com/24591259/115112136-0405f000-9fbf-11eb-8fcf-9527d0bc5188.GIF) +# ์›นํŽ˜์ด์ง€ ๐Ÿ“ฒ +แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-02 แ„‹แ…ฉแ„’แ…ฎ 11 03 36 ๊ฐ„๋‹จํ•˜๊ฒŒ ``vue``ํ”„๋กœ์ ํŠธ์—์„œ `Heymoji`์˜ api๋ฅผ ํ˜ธ์ถœํ•ด **User list**๋ฅผ ๋ณด์—ฌ์ฃผ๋„๋ก ๋งŒ๋“ค์–ด ๋ดค์Šต๋‹ˆ๋‹ค.
์ด๋ชจ์ง€ ์ถ”๊ฐ€, ์ œ๊ฑฐ event์— ๋”ฐ๋ผ ์„œ๋ฒ„์—์„œ count ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š”๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -Emoji rank web ํ”„๋กœ์ ํŠธ๋ฅผ **clone** ํ•ด์„œ ํ™•์ธํ•ด๋ณด์„ธ์š”๐Ÿ˜ƒ