Lotto Map Backend는 명당 로또 판매점 위치 정보를 제공하는 서비스의 백엔드 서버입니다.
당첨 이력을 기준으로 판매점 순위를 매겨 제공합니다.
이 프로젝트는 사용자 주변의 명당 판매점을 쉽게 찾을 수 있도록 도와주는것을 목적으로 합니다.
모든 API는 JSON 형식의 응답을 반환합니다.
- URL:
/lotto-stores - Method:
GET - Response:
{ "data": [ { "id": 1, "name": "판매점명", "address": "판매점 주소", "phone" : "전화번호", "lat": "위도", "lon": "경도" }, ... ] }
- URL:
/lotto-stores/:id - Method:
GET - Response:
{
"data": {
"id": 1,
"name": "판매점명",
"address": "판매점 주소",
"phone" : "전화번호",
"lat": "위도",
"lon": "경도" ,
"winningInfo" : [
{
"id" : "당첨정보 ID",
"store_id" : 1,
"draw_no" : "회차번호",
"rank" : "당첨 등수",
"category" : "당첨 분류(자동,수동)"
},
]
}
}- URL:
/api/stores - Method:
POST - Request Body:
사용자 주변 2km 반경의 위도,경도를 받습니다.
{
"northEastLat": "북동쪽 위도",
"northEastLon": "북동쪽 경도",
"southWestLat": "남서쪽 위도",
"southWestLon": "남서쪽 경도"
}- Response:
- 통계점수 기준으로 내림차순 정렬하여 응답합니다.
{
"data": [
{
"id": 1,
"name": "판매점명",
"address": "판매점 주소",
"phone" : "전화번호",
"lat": "위도",
"lon": "경도" ,
"winningInfo" : [
{
"id" : "당첨정보 ID",
"store_id" : 1,
"draw_no" : "회차번호",
"rank" : "당첨 등수",
"category" : "당첨 분류(자동,수동)"
},
...
]
},
...
]
}- 변경 혹은 폐업한 판매점정보를 갱신합니다.
Axios를 이용해, 동행복권 사이트에 접속해 당첨정보를 추출하여 저장합니다.lotto_store_rankingView를 갱신합니다.- 매주 일요일 02시에 실행됩니다.
| 컬럼명 | 데이터타입 | 설명 |
|---|---|---|
| id | integer | 판매점 ID (Primary Key) |
| name | varchar | 판매점 이름 |
| address | varchar | 판매점 주소 |
| phone | varchar | 판매점 전화번호 |
| lat | decimal | 판매점 위도 |
| lon | decimal | 판매점 경도 |
| 컬럼명 | 데이터타입 | 설명 |
|---|---|---|
| id | integer | 당첨 정보 ID (Primary Key) |
| store_id | integer | 판매점 ID (Foreign Key - lotto_stores.id) |
| draw_no | integer | 회차번호 |
| rank | integer | 당첨 등수 |
| category | varchar | 당첨 분류 (자동,수동) |
| 컬럼명 | 데이터타입 | 설명 |
|---|---|---|
| id | integer | 판매점 ID (Primary Key) |
| name | varchar | 판매점 이름 |
| address | varchar | 판매점 주소 |
| phone | varchar | 판매점 전화번호 |
| lat | decimal | 판매점 위도 |
| frist_prize | integer | 1등 당첨횟수 |
| second_prize | integer | 2등 당첨횟수 |
| score | integer | 통계 점수 |
판매점당 통계 점수를 미리 계산해 두어, 조회 시 더 빠르게 처리할 수 있도록 설계하였습니다.
스케줄이 실행되어 당첨 정보가 추가될 때, 갱신되도록 설정하였습니다.