Skip to content

codestates/WBABEProject-20

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 

Repository files navigation

WBABEProject-20

1.프로젝트 정보

프로젝트 제목 : 온라인 주문 시스템 프로젝트 내용 : Golang과 mongodb를 이용하여 온라인 주문 시스템의 Backend API 개발
①주문자/피주문자의 역할에 필수적인 기능을 구현
②주문자와 피주문자의 입장에서 필요한 기능을 도출하여 주문 서비스 기능을 구현
③주문부터 배달까지 주문내역 관리 서비스 기능을 구현

2.구조

📦go-ordering
┣ 📂conf
┃ ┣ 📜config.go
┃ ┗ 📜config.toml
┣ 📂controller
┃ ┣ 📜controller.go
┃ ┗ 📜controllerConvParams.go
┣ 📂docs
┃ ┣ 📜docs.go
┃ ┣ 📜swagger.json
┃ ┗ 📜swagger.yaml
┣ 📂logger
┃ ┗ 📜logger.go
┣ 📂logs
┃ ┗ 📜go-loger_2022-12-25.log
┣ 📂model
┃ ┣ 📜model.go
┃ ┣ 📜modelDataCheck.go
┃ ┗ 📜modelStruct.go
┣ 📂router
┃ ┗ 📜router.go
┣ 📜go.mod
┣ 📜go.sum
┗ 📜main.go

3.프로젝트에 필요한 Go 패키지


 #gin
 $ go get "github.com/gin-gonic/gin"
 
 #errorgroup
 $ go mod download golang.org/x/sync
 
 #mongodb 
 $ go get go.mongodb.org/mongo-driver/mongo
 $ go get go.mongodb.org/mongo-driver/mongo/options
 $ go get go.mongodb.org/mongo-driver/bson
 
 #swagger
 $ go get -u github.com/swaggo/swag/cmd/swag
 $ go install github.com/swaggo/swag/cmd/swag@latest
 $ go get -u github.com/swaggo/gin-swagger
 $ go get -u github.com/swaggo/files
 
 #toml
 $ go get "github.com/naoina/toml" 
 
 #log
 $ go get "github.com/natefinch/lumberjack"
 $ go get "go.uber.org/zap"
 $ go get "go.uber.org/zap/zapcore"
 
 #uuid
 $ go get github.com/google/uuid
 
 #validator
 $ get github.com/go-playground/validator
 

4. DataBase

Database : go-ready

유저 Collection : tUserAccount

메뉴 Collection : tMenu

주문리스트 Collection : tOrdererMenuLink

tOrdererMenuLink에 MenuID 속성을 추가하여 tMenu와 링크 관리

초기값 설정 : 유저 설정을 위해 DB에 유저값을 INSERT한다. (유저등록은 구현안함)


 db.tUserAccount.insertMany([{userID:"LEE",userName:"이철수",userType:"판매자"}
,{userID:"KIM",userName:"김영희",userType:"주문자"}])
 

속성


 type Menu struct {
	MenuID     string `bson:"menuID"`                            //메뉴 ID
	SellerID   string `bson:"sellerID"`                          //판매자 ID
	SellerName string `bson:"sellerName"`                        //판매자 이름
	MenuName   string `bson:"menuName"`                          //메뉴 이름
	Status     string `bson:"status"`                            //주문 가능 상태 nums(준비중, 판매중)
	MaxCount   int    `bson:"maxCount" validate:"min=1,max=50"`  //판매 가능 갯수 mininum(1) maxinum(50)
	CountryOf  string `bson:"countryOf"`                         //원산지 Enums(한국, 일본, 중국)
	Price      int    `bson:"price"`                             //가격
	Spicy      string `bson:"spicy"`                             //맵기 Enums(아주매움, 매움, 보통, 순한맛)
	Popularity int    `bson:"popularity" validate:"min=1,max=5"` //인기도 mininum(1) maxinum(5)
	IsRecommeded bool `bson:"isRecommeded"` 		     //판매여부 default(true)
	IsTdoayMenu bool `bson:"isTdoayMenu"` 			     //오늘의 추천메뉴 여부 default(false)
	Category []string `bson:"category"`			     //메뉴 카테고리 Enums(한식, 일식, 중식)
}

type OrdererMenuLink struct {
	OrderNo        string `bson:"orderNo"`                               //주문번호
	SellerID       string `bson:"sellerID"`                              //판매자 ID
	MenuID         string `bson:"menuID"`                                //메뉴 ID
	OrdererID      string `bson:"ordererID"`                             //주문자ID
	MenuName       string `bson:"menuName"`                              //메뉴이름
	OrderStarGrade int    `bson:"orderStarGrade" validate:"min=1,max=5"` //평점 mininum(1) maxinum(5)
	OrderComment   string `bson:"ordercomment"`                          //후기
	OrderStatus    string `bson:"orderStatus"`                           //주문상태 Enums(주문확인중 - 조리중 - 배달중 - 배달완료 - 주문취소)
	OrdererAddress string `bson:"ordererAddress"`                        //주문자 주소
	OrdererPhone   int    `bson:"ordererPhone"`                          //주문자 폰번호
}

type UserAccount struct {
	UserID     string `bson:"userID"`     //주문자 ID
	UserName   string `bson:"userName"`   //주문자 이름
	UserType   string `bson:"userType"`   //판매자, 주문자 nums(판매자, 주문자)
	Address    string `bson:"address"`    //주문자 주소
	Phone      int    `bson:"phone"`      //주문자 폰번호
	OrderCount int    `bson:"orderCount"` //주문 숫자
	SellCount  int    `bson:"sellCount"`  //주문 숫자
}
 

5. API 구현 기능

피주문자


 /oos/seller/menu [POST]         // @Description  메뉴 등록 - 피주문자
 /oos/seller/menu{menuID} [PUT]  // @Description  메뉴 수정 - 피주문자 (메뉴ID를 기준으로 메뉴 업데이트)
 /oos/seller/menu [DELETE]       // @Description  메뉴 삭제 - 피주문자 (판매여부 bool 설정변경)
 /oos/seller/menu [GET]          // @Description  메뉴 검색 - 주문자, 피주문자
 /oos/seller/orderStatus         // @Description  주문 내역 조회 - 피주문자 (판매자ID 기준으로 검색)
 /oos/seller/setTodayMenu        // @Description  오늘의 추천메뉴 여부 - 설정 변경 (메뉴ID를 기준으로 메뉴 업데이트)
 

주문자


 /oos/order/viewMenu        // @Description  주문 상세 - 주문자, 피주문자
 /oos/order/newOrder        // @Description  주문 등록 - 주문자
 /oos/order/changeOrder     // @Description  주문 변경 - 주문자 (주문변경 커멘드 Enums(주문추가, 주문취소, 정보변경))
 /oos/order/searchOrder     // @Description  주문 내역 조회 기능 - 주문자 (주문자ID, 주문상태로 조회)
 /oos/order/viewOrder       // @Description  주문 상세 - 주문자, 피주문자
 /oos/order/createReview    // @Description  리뷰 등록 - 주문자 (주문번호 기준으로 등록
 /oos/order/searchTodayMenu // @Description  오늘의 추천메뉴 리스트
 

Swagger 참고

image

/oos/seller/menu [POST] // @Description 메뉴 등록 - 피주문자


  {
  "category":  ["한식","중식"],
  "countryOf": "대한민국",
  "isRecommeded": true,
  "maxCount": 20,
  "menuName": "마라탕면",
  "price": 9000,
  "sellerID": "LEE",
  "sellerName": "리반점",
  "spicy": "보통",
  "status": "판매중",
  "isTdoayMenu": true
 }
 

image image

/oos/seller/menu/{menuID} [PUT] // @Description 메뉴 수정 - 피주문자 (메뉴ID를 기준으로 메뉴 업데이트)


 "menuID": "ee097877-2878-43da-b312-f72f4a233089"
  {
  "category":  ["일식","중식"],
  "countryOf": "중국",
  "popularity" : 4,
  "maxCount" : 20,
  "isRecommeded": true
 }
 

image image

/oos/seller/menu [DELETE] // @Description 메뉴 삭제 - 피주문자 (판매여부 bool 설정변경)


   "menuID": "ee097877-2878-43da-b312-f72f4a233089"
   "isRecommeded": true
 

image image

/oos/seller/menu [GET] // @Description 메뉴 검색 - 주문자, 피주문자

image image

/oos/seller/orderStatus // @Description 주문 내역 조회 - 피주문자 (판매자ID 기준으로 검색)

image image

/oos/seller/setTodayMenu // @Description 오늘의 추천메뉴 여부 - 설정 변경 (메뉴ID를 기준으로 메뉴 업데이트)


 {
  "todayMenu": true,
  "menuID": "ee097877-2878-43da-b312-f72f4a233089"
 }
 

image image

/oos/order/newOrder // @Description 주문 등록 - 주문자


 {
  "menuID": "ee097877-2878-43da-b312-f72f4a233089",
   "ordererID": "KIM",
   "ordererAddress": "서울시 광진구",
   "ordererPhone": 1012345678
 }
 

image image

/oos/order/viewMenu // @Description 주문 상세 - 주문자, 피주문자

image image

/oos/order/changeOrder // @Description 주문 변경 - 주문자 (주문변경 커멘드 Enums(주문추가, 주문취소, 정보변경))


 {
  "changeOrderCmd": "정보변경",
  "orderNo": "5ca65c501bc8409ca92a2a9496170943",
  "ordererAddress": "서울시 서초구",
  "ordererPhone": 1043719999
 }
 

image image

/oos/order/searchOrder // @Description 주문 내역 조회 기능 - 주문자 (주문자ID, 주문상태로 조회)

image image

/oos/order/viewOrder // @Description 주문 상세 - 주문자, 피주문자

image image

/oos/order/createReview // @Description 리뷰 등록 - 주문자 (주문번호 기준으로 등록


 {
  "orderComment": "맛있습니다.",
  "orderNo": "5ca65c501bc8409ca92a2a9496170943",
  "orderStarGrade": 5,
  "ordererID" : "KIM"
 }
 

image image

/oos/order/searchTodayMenu // @Description 오늘의 추천메뉴 리스트

image image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages