Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jay-chan9yu/heymoji

๐Ÿคฉ ์Šฌ๋ž™ ์›นํ›…์œผ๋กœ ๋ฆฌ์•ก์…˜(reaction)์„ ๋ฐ›์•„์„œ ์ด๋ชจ์ง€(Emoji) ๋žญํ‚น์„ ๊ตฌํ•˜๋Š” ์›นํ›… ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค!
https://github.com/jay-chan9yu/heymoji

emoji-rank fastapi heymoji python vuejs

Last synced: about 6 hours ago
JSON representation

๐Ÿคฉ ์Šฌ๋ž™ ์›นํ›…์œผ๋กœ ๋ฆฌ์•ก์…˜(reaction)์„ ๋ฐ›์•„์„œ ์ด๋ชจ์ง€(Emoji) ๋žญํ‚น์„ ๊ตฌํ•˜๋Š” ์›นํ›… ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค!

Awesome Lists containing this project

README

        



# Hey + Emoji = Heymoji

### ๊ฐœ๋ฐœ์ž์˜ ํ•œ๋งˆ๋”” ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป

๋งํฌ๋“œ์ธ์—์„œ
๋งคํ”„ ๋ฉค๋ฒ„๋“ค์ด ์„œ๋กœ ํ† ๋งˆํ† ๋ฅผ ์ฃผ๋Š” ์ด์œ ๋Š”?
๋ผ๋Š” ๊ธ€์„ ์ฝ๊ณ , ์Šฌ๋ž™ ์ด๋ชจ์ง€(Emoji)๋กœ ๋ฉค๋ฒ„๋“ค์—๊ฒŒ ``์นญ์ฐฌ``์ด๋‚˜ ``๋ฆฌ์ŠคํŽ™`` ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธํ™”๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์žฌ๋ฐŒ๊ธฐ๋„ ํ•˜๊ณ  ๊ณ ๋งˆ์›€๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ
๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์žฌ๋ฏธ๋‚œ ๊ธฐ๋Šฅ์€ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ํ† ์ด ํ”„๋กœ์ ํŠธ๋กœ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

(๊ทผ๋ฐ Nodejs๋กœ ๋งŒ๋“ค์–ด์ง„๊ฒŒ ์ด๋ฏธ ์žˆ์—ˆ๋„ค์š” heyburrito)


์ข€ ๋” `์žฌ๋ฏธ๋‚œ ๊ธฐ๋Šฅ + ์™„์„ฑ๋„ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ`๊ฐ€ ๋˜๊ธฐ์œ„ํ•ด ์œ ์ง€๋ณด์ˆ˜๋Š” ์ง€์†์ ์œผ๋กœ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.๐Ÿ’ช

FastAPI์— ๊ตฌ์กฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ๋œ ์ถ”๊ฐ€๊ธฐ๋Šฅ, ๊ฐœ์„ ์‚ฌํ•ญ `PR`์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!


## ๐Ÿ‘‹ ๊ฐœ์š”

ํ—ค์ด๋ชจ์ง€

`Heymoji` API์„œ๋ฒ„๋Š” `Python 3.10`, `FastAPI` ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์™ธ ๋ฒ„์ „์—์„œ ํŒจํ‚ค์ง€ ๋ฐ ๋™์ž‘์— ๋Œ€ํ•œ ํ˜ธํ™˜์€ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๊ทผ๋ฐ ๊ฑฐ์˜ ๋‹ค ๋ ๊ฑฐ์—์š” python3.7 ์ด์ƒ์ด๋ฉด...์•„๋งˆ๋‘~๐Ÿ˜ )

ํ”„๋ก ํŠธ์—”๋“œ๋Š” `vuejs`๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค์–ด ๋ดค์Šต๋‹ˆ๋‹ค!


## ๐Ÿ›  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

์ฒ˜์Œ `Heymoji`๋ฅผ ๊ฐœ๋ฐœํ• ๋•Œ๋Š” DDD ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

DDD์— ๋Œ€ํ•œ ์Šคํ„ฐ๋””๋ฅผ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ https://github.com/Ermlab/python-ddd ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์†Œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜์™€ ์—ฌ๋Ÿฌ ์ƒํƒœ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ DDD๊ฐ€ ์ข€ ๋” ์œ ์—ฐํ•  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค๐Ÿ˜

```
โ”œโ”€โ”€ apps
| โ”œโ”€ api
| | โ”œโ”€โ”€ dependancy
| | โ””โ”€โ”€ router
| โ”œโ”€ applications
| | โ””โ”€โ”€ services (Application Service)
| โ”œโ”€ domains
| | โ””โ”€ user (๋„๋ฉ”์ธ)
| | โ”œโ”€ entities.py
| | โ”œโ”€ services.py (Domain Service)
| | โ”œโ”€ repositories.py
| | โ””โ”€ schemas.py
| โ”œโ”€ infrastructure (infra ๊ด€๋ จ ์ •์˜ ๊ตฌ์กฐ)
| โ”œโ”€ utils
| โ”œโ”€ tests
| โ””โ”€ main.py
โ”œโ”€โ”€ conf
| โ””โ”€โ”€ settings.py
โ”œโ”€โ”€ scripts
โ”œโ”€โ”€ migrations (alembic DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„ค์ •)
โ”œโ”€โ”€ seed_work (ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ์ž‘์—…, ์ฝ”๋“œ)
โ”œโ”€โ”€ alembic.ini
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ docker-compose.yaml
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ web.Dockerfile
โ”œโ”€โ”€ .env_sample
โ””โ”€โ”€ frontend (heymoji ์›นํŽ˜์ด์ง€ ๊ด€๋ จ ์ฝ”๋“œ)
```


## ๐Ÿ’พ ์„ธํŒ…

`.env_sample`์„ ์ฐธ๊ณ ํ•ด์„œ `.env`ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์›ํ•˜์‹œ๋Š” ์„ธํŒ…์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ค์„ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

DB๋Š” `MySQL`์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด `aiomysql`๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ DB ์‚ฌ์šฉํ•˜๋ ค๋ฉด `config` ์„ค์ •์ด ์กฐ๊ธˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

| ์ด๋ฆ„ | ์„ค๋ช… |
|-----------------------------------|---------------------------------------|
| ENV | ๋ฐฐํฌํ™˜๊ฒฝ ์ •์˜ |
| ALLOW_ORIGINS | CORS๋ฅผ ํ—ˆ์šฉํ•  ORIGIN ๋ฆฌ์ŠคํŠธ |
| DB_HOST | DB ํ˜ธ์ŠคํŠธ |
| DB_PORT | DB ํฌํŠธ |
| DATABASE | DB ์ด๋ฆ„ |
| DB_USERNAME | DB ์ ‘์† ์œ ์ €๋„ค์ž„ |
| DB_PASSWORD | DB ํŒจ์Šค์›Œ๋“œ |
| SLACK_TOKEN | ์Šฌ๋ž™ ํ† ํฐ |
| BOT_NAME | ์Šฌ๋ž™๋ด‡ ์ด๋ฆ„ |
| ERROR_CHANNEL | ์Šฌ๋ž™ ์—๋Ÿฌ ๋ฆฌํฌํŒ… ์ฑ„๋„ |
| SPECIAL_EMOJI | ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ์ด๋ชจ์ง€ |
| LIMIT_GIVE_COUNT_OF_SPECIAL_EMOJI | ๋งค์›” ๋‹ค๋ฅธ ๋ฉค๋ฒ„์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” SPECIAL_EMOJI ์ œํ•œ ๊ฐœ์ˆ˜ |
| ALLOWED_REACTION_LIST | ์›นํ›… ๋ฆฌ์•ก์…˜์œผ๋กœ ํ—ˆ์šฉ๋œ ์ด๋ชจ์ง€(reaction)๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. |
| ALLOWED_EMOJI_TYPES | ํ•ธ๋“ค๋งํ•  ์ด๋ชจ์ง€๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. |
| RANK_URL | ๋žญํ‚น ์›นํŽ˜์ด์ง€ URK |
| DEFAULT_AVATAR_URL | ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ URL |


## ๐Ÿณ Docker-Compose ์‹คํ–‰

`.env_sample`์„ ์ฐธ๊ณ ํ•˜์—ฌ`.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` ๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋จผ์ € ์ฃผ์ž…ํ•ด์ฃผ์„ธ์š”!


## ๐Ÿ’ก ๋กœ์ปฌ ์‹คํ–‰

```
pip install -r requirements
```

`root๊ฒฝ๋กœ`(/heymoji) ์— ๊ฐ€์„œ uvicorn์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `&`๋ฅผ ๋งˆ์ง€๋ง‰์— ๋ถ™์—ฌ์ฃผ์„ธ์š”.

```
uvicorn app.main:app --port 8080
```

๋งŒ์•ฝ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ

```
1. ps aux | grep uvicorn
2. kill -9 {PID}
```

์ž˜๋ชป๋œ ํ”„๋กœ์„ธ์Šค kill์„ ์ฃผ์˜ํ•˜์„ธ์š”!


## ๐Ÿ“ API ๋ฌธ์„œ ๋ฐ ํ…Œ์ŠคํŠธ

``HOST_URL/docs``๋กœ ์ ‘์†ํ•˜๋ฉด ``Swagger``๋กœ ๋งŒ๋“ค์–ด์ง„ web ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (FastAPI๋Š” swagger, redoc ์ง€์›)

API ๋ฌธ์„œ ๋ฐ ํ…Œ์ŠคํŠธ



## ๐Ÿ‘พ ์Šฌ๋ž™ ๋งจ์…˜ ๋ช…๋ น์–ด

| ์ด๋ฆ„ | ์„ค๋ช… |
|------------------|----------------------------|
| help | ์ปค๋ฉ˜๋“œ ๊ด€๋ จ help |
| create_user | user ์ƒ์„ฑ |
| update_user | user ์ •๋ณด ์—…๋ฐ์ดํŠธ |
| show_user | ์œ ์ € is_display = True (๋…ธ์ถœ) |
| hide_user | ์œ ์ € is_display = False (์ˆจ๊น€) |
| show_best_member | ํ•ด๋‹น์›” ๋ฒ ์ŠคํŠธ ๋ฉค๋ฒ„ ์ถ”์ถœ |

```
๐Ÿฅณ ๋ฉค๋ฒ„ ๋“ฑ๋ก
์ด๋ฆ„์€ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค!
@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
```

### ๐ŸŽ– show_best_member ์˜ˆ์‹œ

show_best_member ์˜ˆ์‹œ

### ๐Ÿš€ Postman ์œผ๋กœ ์œ ์ € ๋“ฑ๋ก ์˜ˆ์‹œ

ํฌ์ŠคํŠธ๋งจ ๋“ฑ๋ก ์˜ˆ์‹œ



## ๐ŸงŸโ€โ™‚๏ธ ํ”„๋กœ์„ธ์Šค Live ์ฒดํฌ (์„ ํƒ)

shell script๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ Live ์ฒดํฌ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ํฌ๋ก ํƒญ์— 1๋ถ„๋งˆ๋‹ค ์‹คํ–‰ํ•˜๋„๋ก ๋“ฑ๋ก.

๋กœ๊น…๋„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

```
#! /bin/bash
PYTHON_PATH=/{{ path }}/venv/bin/python
SCRIPT_PATH=/{{ path }}/heymoji/app

checker=`ps aux | grep -v "grep" | grep "{{ ๊ฒ€์ƒ‰ํ•  ์ด๋ฆ„}}" | wc -l`

if [ "$checker" == "0" ]; then
source '{{ path }}/venv/bin/activate'
cd $SCRIPT_PATH && `uvicorn main:app --port 8080 &`
fi
```


# ๐Ÿค– Slack Bot ์„ค์ •

https://api.slack.com/apps ์— ์ ‘์†ํ•˜์—ฌ create app ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„,

์›ํ•˜๋Š” ``workspace``์— ``app``์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”!

`Basic Information` ํƒญ์„ ํด๋ฆญํ›„ ํ•˜๋‹จ์—์„œ app์˜ ``ํ”„๋กœํ•„ ์ด๋ฏธ์ง€``๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  Save ํ•ด์ค๋‹ˆ๋‹ค.

์ด๊ฑด ์•ˆํ•ด๋„ ๋˜์ง€๋งŒ ํ•˜๋Š”๊ฒŒ ์ข‹์•„์š”. ์™œ๋ƒํ•˜๋ฉด ๋ฉ‹์žˆ๊ฑฐ๋“ ์š”๐Ÿ˜Ž

`Add features and functionality`์—์„œ `Event Subscriptions`์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

`Event`๋ฅผ Enable(ํ™œ์„ฑํ™”) ์‹œํ‚จํ›„ `Requst URL`์„ ๋„ฃ์–ด์„œ ์ธ์ฆ์„ ํ•ฉ๋‹ˆ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-02 แ„‹แ…ฉแ„’แ…ฎ 10 12 32

์œ„ ํ™”๋ฉด์—์„œ ์Šฌ๋ž™ํ† ํฐ์„ copyํ•˜์—ฌ ``.env`` ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ngrok์„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค.์‹ค์ œ prod
ํ™˜๊ฒฝ์—์„œ๋Š” `Nginx + uvicorn`์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋˜์š”!

Nginx Config ์—์„œ `proxy_pass` ๋งŒ uvicorn์œผ๋กœ ์‹คํ–‰ํ•œ ๋กœ์ปฌ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

`Heymoji`๋Š” ์Šฌ๋ž™ ๋ฉค๋ฒ„๋“ค์˜ `reaction_added`, `reaction_removed` ์ด๋ฒคํŠธ์™€ bot์„ ํ˜ธ์ถœํ•˜๋Š” `app_mention` ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.


์Šฌ๋ž™๋ด‡๊ณผ DM์„ ํ†ตํ•ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `message.im`์„ ์„ ํƒํ•˜๊ณ  Message Tab ๊ธฐ๋Šฅ์„ on ์‹œ์ผœ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ `app`์„ `workspace`์— ์„ค์น˜(install)ํ•˜๋ฉด ์„ค์ •ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค `slack`์—์„œ `Heymoji`์„œ๋ฒ„๋กœ ์›นํ›… api๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.